我想做以下事情:
final Action myAction = getActionDefinedInStrutsConfig(param);
myAction.execute(params);
有没有办法查找ActionServlet
已初始化的操作?
我可以像这样创建一个新的:
final Action myAction = new ActionImpl();
myAction.execute(params);
但是这样新的操作没有正确初始化,附加的servlet没有设置,getServlet()返回null。
稍微澄清我为什么需要这个:
问题是我目前有2个登录页面。一个用于普通用户,一个用于管理员。它们应该是完全独立的系统,但事实是它们目前还没有。我需要创建一个“代理”登录页面,根据请求决定重定向到哪个登录页面。如果我重定向到URL,则会绘制UI。我需要调用用户或管理员登录操作来处理我的代理页面请求。此外,在正确的方法中移动服务中的逻辑也不是一种选择。
答案 0 :(得分:2)
好的,既然我明白了你的意思,我会建议:
ActionForm
检索数据并检查有效性。完成所有信息后,将信息发送到服务。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")
。