如何查找配置的Struts操作

时间:2011-06-01 10:59:55

标签: java servlets struts-1

我想做以下事情:

final Action myAction = getActionDefinedInStrutsConfig(param);
myAction.execute(params);

有没有办法查找ActionServlet已初始化的操作?

我可以像这样创建一个新的:

 final Action myAction = new ActionImpl();
 myAction.execute(params);

但是这样新的操作没有正确初始化,附加的servlet没有设置,getServlet()返回null。


稍微澄清我为什么需要这个:

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

2 个答案:

答案 0 :(得分:2)

好的,既然我明白了你的意思,我会建议:

  • 将您的操作用于验证目的,即从ActionForm检索数据并检查有效性。完成所有信息后,将信息发送到服务。
  • 服务(不需要是Web服务,而是简单的POJO)将具有应用程序的业务逻辑,具有相关的异常和返回类型。使用其方法调用相关服务后,检索结果,最后
  • 填充必要的ActionForm或执行mapping.findForward()

这样,如果您需要另一个Struts Action使用的另一个业务逻辑,而是调用第二个操作使用的服务。这是代码重用和良好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);

答案 1 :(得分:0)

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

    <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")