已知条件如下:
// 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()进行验证?
// 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()进行验证?
解决方案 »
- 谁能给个最简单的http+xml的例子程序代码片段呀
- Strut2的<s:hidden>向action传值的问题,高手来帮忙下
- 文本框设置系统默认的时间
- 有没讲Spring好点的书
- Strus的优缺点,Spring的优缺点
- 关于垃圾收集器和nested class的问题
- 100分,在hibernate中为何one-to-many的时候只能插入到one的那张,而many的表就不成功,但是也不报错。为何?分不够再加,谢谢!
- servlet的中文问题!!恳求解决
- 请教:读取配置文件问题
- weblogic驱动的错误如何解决?
- spring中的代理模式
- S2SH整合问题could not insert: [com.msgtemplate.entity.Template]
// 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>但是,当我一定要使用动态方法调用。那么应该如何设置呢?
这样命名你的xml文件
类型-方法名-validation.xml
就可以了
当然必须和类在同一包内
那么,我命名为"LoginAction-login-validation.xml"后,
调用http://127.0.0.1:8080/struts2_login/login/Login!login.action也不会验证啊?为什么?
这个在代码里面确实可以的,可是在XML里面实现这样的功能还不知道如何配置?
这个类名指的是你action的累
方法名是你所指定的方法的名字
比如你指定的方法是
LoginAction中的aaa()方法
那这个方法名你就该写成aaa
<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]
我在我机器上看看.
<action name="Login!*" class="struts.action.login.LoginAction" method={1}>
在类的目录下放
LoginAction-login-validation.xml
LoginAction-Login-validation.xml
LoginAction-Login!login-validation.xml
这三个多试过了, 还是不行。
(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,防止校验之间的相互干扰