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

默认情况下,我希望我的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>

    <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
    }
}