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()
可破解的方法是:
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。我需要调用用户或管理员登录操作来处理我的代理页面请求。在服务中移动逻辑虽然是正确的方法,但目前还不是一个选项。然后添加另一个可以通过请求检索的参数,并添加代理来转发此类请求。