Java 如何查找已配置的Struts操作

Java 如何查找已配置的Struts操作,java,servlets,struts-1,Java,Servlets,Struts 1,我想做以下工作: final Action myAction = getActionDefinedInStrutsConfig(param); myAction.execute(params); 是否有方法查找ActionServlet已初始化的操作 我可以创建一个新的,如下所示: final Action myAction = new ActionImpl(); myAction.execute(params); 但这样,新操作没有正确初始化,附加的servlet没有设置并返回null

我想做以下工作:

final Action myAction = getActionDefinedInStrutsConfig(param);
myAction.execute(params);
是否有方法查找
ActionServlet
已初始化的操作

我可以创建一个新的,如下所示:

 final Action myAction = new ActionImpl();
 myAction.execute(params);
但这样,新操作没有正确初始化,附加的servlet没有设置并返回null


关于我为什么需要这个的一点澄清:


问题是我目前有2个登录页面。一个用于普通用户,一个用于管理员。它们应该是完全独立的系统,但事实是它们目前不是。我需要做一个“代理”登录页面,根据请求决定重定向到哪个登录页面。如果我重定向到URL,则会绘制UI。我需要调用用户或管理员登录操作来处理我的代理页面请求。同时,在服务中移动逻辑虽然是正确的方法,但目前还不是一个选项。

您可以在转发中定义操作:

    <action parameter="command" path="/firstAction"
        input="firstAction.tiles" name="someForm" scope="session" validate="true" type="com.mycompany.FirstAction">
        <forward name="toSecond" path="/secondAction.do?command=someMethod" redirect="true"/>
    </action>

    <action parameter="command" path="/secondAction" input="secondAction.tiles" name="someForm"
        scope="session" validate="true" type="com.mycompany.SecondAction">
        <forward name="backToFirst" path="/firstAction.do?command=myMethod" redirect="true" />
    </action>


现在,您可以在第一个操作中使用
mapping.findForward(“toSecond”)
,在另一个操作中使用
mapping.findForward(“backToFirst”)

好的,我明白您的意思了,我建议您:

  • 将您的操作用于验证目的,即从
    ActionForm
    检索数据并检查有效性。完成所有信息后,将信息发送到服务
  • 该服务(不需要是web服务,而是一个简单的POJO)将具有应用程序的业务逻辑,以及相关的异常和返回类型。调用相关服务及其方法后,检索结果,最后
  • 填充必要的
    ActionForm
    或执行
    映射。findForward()
这样,如果您需要另一个Struts操作使用的另一个业务逻辑,请调用第二个操作使用的服务。这是代码重用和良好OOP实践的有效方法

希望这有帮助


可破解的方法是:

final Action myAction = new ActionImpl();
myAction.setServlet(getServlet());
/* ONLY if your form enctype is "multipart/request-data". */
myAction.setMultipartRequestHandler(getMultipartRequestHandler());

//Finally
myAction.execute(params);

你到底想做什么?具体目的是什么?从我的行动中调用另一个行动。因为我想在不绘制UI的情况下调用它的逻辑。您可以在
struts config.xml
中将您的操作转发到另一个操作。这不总是绘制我转发到的操作的UI吗?在我的测试中,我似乎无法让它不绘制UI。我想让被调用的操作进程成为我的请求,而不绘制它自己的UI。这对我不起作用,因为我不想绘制我要转发到的操作的UI。有没有一种方法可以在不绘制要转发到的操作的UI的情况下进行转发?如果我理解正确,您希望重用代码,对吗?您不能在第二个操作中处理请求并将其转发给第一个操作吗?您还可以让这两个操作都从带有
doStuff(Request req)
的类继承。这是一种标准的方法。但是,在传统系统中,我希望在控制器级别执行此操作。不是在业务服务级别(逻辑所在),您建议的方式才是正确的方式。如果你愿意,我可以解释为什么我需要控制器级别的,但我不想浪费你的时间。继续Simeon,我们不知道你的系统是如何设置的,我不建议更改控制器级别的东西……问题是我目前有2个登录页面。一个用于普通用户,一个用于管理员。它们应该是完全独立的系统,但事实是它们目前不是。我需要做一个“代理”登录页面,根据请求决定重定向到哪个登录页面。如果我重定向到URL,则会绘制UI。我需要调用用户或管理员登录操作来处理我的代理页面请求。在服务中移动逻辑虽然是正确的方法,但目前还不是一个选项。然后添加另一个可以通过请求检索的参数,并添加代理来转发此类请求。