struts2一个action对多个方法的校验

panqunjun 2009-02-25 03:47:21
已知条件如下:
// 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()进行验证?
...全文
1689 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wulingdongliu 2011-11-01
  • 打赏
  • 举报
回复
不错,看了之后很有收获,我也被这个问题困扰
程序猿DD 2009-03-01
  • 打赏
  • 举报
回复
在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,防止校验之间的相互干扰
panqunjun 2009-02-26
  • 打赏
  • 举报
回复
你说的有点道理,可是,我试过不行。
<action name="Login!*" class="struts.action.login.LoginAction" method={1}>
在类的目录下放
LoginAction-login-validation.xml
LoginAction-Login-validation.xml
LoginAction-Login!login-validation.xml
这三个多试过了, 还是不行。
jack420124 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 panqunjun 的帖子:]
已知条件如下:
// 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">

[/Quote]
(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包括的所有相关的文件打包发到我邮件里面wxp03@163.com
我在我机器上看看.
PennyFeng 2009-02-25
  • 打赏
  • 举报
回复
类型-方法名-validation.xml
这个类名指的是你action的累
方法名是你所指定的方法的名字
比如你指定的方法是
LoginAction中的aaa()方法
那这个方法名你就该写成aaa
panqunjun 2009-02-25
  • 打赏
  • 举报
回复
追加public validateXxx() {}方法, Xxx是要验证的方法名。比如:validateLogin()。
这个在代码里面确实可以的,可是在XML里面实现这样的功能还不知道如何配置?
panqunjun 2009-02-25
  • 打赏
  • 举报
回复
为什么你们多说"类型-方法名-validation.xml"这个格式?
那么,我命名为"LoginAction-login-validation.xml"后,
调用http://127.0.0.1:8080/struts2_login/login/Login!login.action也不会验证啊?为什么?
PennyFeng 2009-02-25
  • 打赏
  • 举报
回复
你使用的是xml校验框架
这样命名你的xml文件
类型-方法名-validation.xml
就可以了
当然必须和类在同一包内
panqunjun 2009-02-25
  • 打赏
  • 举报
回复
不使用动态方法调用,下面是可以的。
// 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>

但是,当我一定要使用动态方法调用。那么应该如何设置呢?

67,543

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧