struts2操作调用不正确
默认情况下,我希望我的struts2应用程序转发到操作:struts2操作调用不正确,struts2,struts2-namespace,Struts2,Struts2 Namespace,默认情况下,我希望我的struts2应用程序转发到操作: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> &l
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<package name="myApp" namespace="/myApp" extends="struts-default">
<action name="Login_*" method="{1}" class="myApp.SessionManager">
<result name="input">/myApp/Login.jsp</result>
<result type="redirectAction">Menu</result>
</action>
</package>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result type="redirectAction">
<param name="actionName">Login_input.action</param>
<param name="namespace">/myApp</param>
</result>
</action>
</package>
</struts>
/myApp/Login.jsp
菜单
登录\u input.action
/myApp
我希望应用程序调用SessionManager.input(),但它调用SessionManager.execute()。从jsp调用操作时,默认方法是execute()。如果要调用另一个方法,可以使用属性method=“”进行规范
属性方法在其他标记上很常见。如果使用的是
,通常不需要公共输入()方法。行动最基本和最典型的场景是:
- 该操作旨在“做某事”(一件事),该操作需要一些用户输入
- 该操作不执行方法execute()中的某些操作
- 如果行动成功地完成了那件事,那就意味着成功。这将触发一个结果信息性JSP页面
- 如果操作没有获得用户输入(因为没有输入,或者因为输入不足或错误),它将返回输入。这将触发一个“输入表单”JSP,以便用户可以填充数据并(重新)尝试该操作
现在,这个基本场景可以用几种方式编码,其中包括:
1) 两个不同的映射,一个用于输入表单,另一个用于执行
<!-- default action class: execute does nothing, returns SUCCES -->
<action name="ActionXXXShowForm">
<result>/myApp/XXXForm.jsp</result>
</action>
<action name="ActionXXX" class="myApp.XXXAction">
<result name="input">/myApp/XXXForm.jsp</result>
<result>/myApp/XXXDone.jsp</result>
</action>
在案例2中,您可以稍微修改它:
public class XXXAction extends ActionSupport {
....
public String execute() throws Exception {
if( emptyInput() ) return INPUT; // no error messages in this case
if(! inputOk()) return INPUT;
// .. do your stuff
return SUCCESS;
}
private boolean inputOk() {
// same as before
}
private boolean emptyInput() {
// detect no input was sent. do not emit errors herer
}
}
需要注意的是,如图所示,代码复制了框架提供的验证机制的大部分内容。
<action name="ActionXXX" class="myApp.XXXAction">
<result name="input">/myApp/XXXForm.jsp</result>
<result>/myApp/XXXDone.jsp</result>
</action>
public class XXXAction extends ActionSupport {
...
public String execute() throws Exception {
if(! inputOk()) return INPUT;
// .. do your stuff
return SUCCESS;
}
private boolean inputOk() {
// ... check your inputs - sort of programatic validation
if( surname == null ) addActionError("no surname");
// .... more checks
return ! hasActionErrors());
}
}
public class XXXAction extends ActionSupport {
....
public String execute() throws Exception {
if( emptyInput() ) return INPUT; // no error messages in this case
if(! inputOk()) return INPUT;
// .. do your stuff
return SUCCESS;
}
private boolean inputOk() {
// same as before
}
private boolean emptyInput() {
// detect no input was sent. do not emit errors herer
}
}