已知条件如下:
// struts-login.xml
<struts>
<package name="login" extends="default" namespace="/login">
<action name="Login" class="struts.action.login.LoginAction">
<result name="input">/WEB-INF/page/login.jsp</result>
<result name="success">/WEB-INF/page/result.jsp</result>
</action>
</package>
</struts>// *-validation.xml
<validators>
    <field name="userName">
        <field-validator type="requiredstring">
            <message key="jsp.empty.msg" />
        </field-validator>
    </field>
    <field name="userPass">
        <field-validator type="requiredstring">
            <message key="jsp.empty.msg"></message>
        </field-validator>
    </field>
    <field name="validateId">
        <field-validator type="int">
            <message key="jsp.empty.msg"/>
        </field-validator>
    </field>
</validators>// 页面请求
http://127.0.0.1:8080/struts2_login/login/Login!init.action
http://127.0.0.1:8080/struts2_login/login/Login!login.action请求如何配置,让调用init()不验证,让login()进行验证?

解决方案 »

  1.   

    不使用动态方法调用,下面是可以的。
    // struts-login.xml
    <struts>
    <package name="login" extends="default" namespace="/login">
    <action name="LoginInit" class="struts.action.login.LoginAction" method="init">
    <result name="input">/WEB-INF/page/login.jsp</result>
    </action>
    <action name="Login" class="struts.action.login.LoginAction" method="login">
    <result name="input">/WEB-INF/page/login.jsp</result>
    <result name="success">/WEB-INF/page/result.jsp</result>
    </action>
    </package>
    </struts>// LoginAction-Login-validation.xml
    // 对名字为Login的action进行验证。相当于把一个action拆成两个action使用。
    <validators>
        <field name="userName">
            <field-validator type="requiredstring">
                <message key="jsp.empty.msg" />
            </field-validator>
        </field>
        <field name="userPass">
            <field-validator type="requiredstring">
                <message key="jsp.empty.msg"></message>
            </field-validator>
        </field>
        <field name="validateId">
            <field-validator type="int">
                <message key="jsp.empty.msg"/>
            </field-validator>
        </field>
    </validators>但是,当我一定要使用动态方法调用。那么应该如何设置呢?
      

  2.   

    你使用的是xml校验框架
    这样命名你的xml文件
    类型-方法名-validation.xml
    就可以了
    当然必须和类在同一包内
      

  3.   

    为什么你们多说"类型-方法名-validation.xml"这个格式?
    那么,我命名为"LoginAction-login-validation.xml"后,
    调用http://127.0.0.1:8080/struts2_login/login/Login!login.action也不会验证啊?为什么?
      

  4.   

    追加public validateXxx() {}方法, Xxx是要验证的方法名。比如:validateLogin()。
    这个在代码里面确实可以的,可是在XML里面实现这样的功能还不知道如何配置?
      

  5.   

    类型-方法名-validation.xml 
    这个类名指的是你action的累
    方法名是你所指定的方法的名字
    比如你指定的方法是
    LoginAction中的aaa()方法
    那这个方法名你就该写成aaa
      

  6.   

    (1)你红色的部分这配置动态的方法不对吧,
    <action name="Login!*" class="struts.action.login.LoginAction" method={1}>
    你在
    在类的目录下放LoginAction-login-validation.xml (因为你要验证的是login方法)
    我想如果你要验证init 则放个LoginAction-init-validation.xml
    看行不行.
    (注意如果向你上面那样配置,LoginAction 调用的是默认的逻辑方法execute,这是super类的方法.
     向你那样配置的struts2.0当请求找不到动态参数的方法,会去找默认的方法execute.这是struts2.0 
    很重要的机制. 所以出现向你说的那样怎么总校验了呢,给你的是种错觉.)
    (2) 如果这样不行,你在LoinAction类里面写loginValidate()方法
    loginValidate()
    {
    if(this.userName == null)
    this.userName  = "";
    if(this.userName.trim().equalsIgnoreCase(""))
    this.addFieldError("userName",this.getText("jsp.empty.msg"));
    .......ERROR...
    }
    也是一样的,也支持国际化消息的.
    (3)如果还有什么问题.
        你把你struts.xml,struts.xml包括的所有相关的文件打包发到我邮件里面[email protected]
        我在我机器上看看.
      

  7.   

    你说的有点道理,可是,我试过不行。
    <action name="Login!*" class="struts.action.login.LoginAction" method={1}> 
    在类的目录下放
    LoginAction-login-validation.xml
    LoginAction-Login-validation.xml
    LoginAction-Login!login-validation.xml
    这三个多试过了, 还是不行。
      

  8.   

    在xxxAction中配置多个校验逻辑
    (1)xxxAction中一个校验方法public String abc()throws Exception{}
    (2)struts.xml中为该action设置method="abc"
    (3)校验XML命名:xxxAction-abc-validation.xml
    (4)注:在这种情况下,xxxAction-validation.xml依然会校验,所以我们称其为全局的Action校验
    (5)建议:若一个Action中处理多个业务逻辑,不写xxxAction-validation.xml,为每个业务逻辑写一个校验xml,防止校验之间的相互干扰