锁定老帖子 主题:Struts验证框架与一些技巧
精华帖 (0) :: 良好帖 (2) :: 新手帖 (8) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-12
最后修改:2009-01-16
还是通过一些步骤例子说明 主要依赖与两个.jar文件 <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> import org.apache.struts.validator.ValidatorForm;// 导入要继承的类 public class 表单类 extends ValidatorForm //修改继承类 <form-validation> <!--以下是配置一些常用的验证规则 --> <formset> <form name="regActionForm"> <!--表单名,为验证哪个表单而配置,这里的name指定struts中form-bean的别名 --> <field property="username" depends="required"> <arg0 key="tip.username"/> </field> arg0指要为该规则传入的第一个参数 <!--property为表单中的属性,depends为要验证的规则key为消息资料文件中的配置键 --> <!-- 验证密码最小长度不小于8位 要一个控件属性验证两个规则的话真正以逗号分开, --> <field property="userpass" depends="required,minlength"> <arg0 key="tip.userpass"/> <arg1 key="${var:minlength}" name="minlength" resource="false"/> <var> <var-name>minlength</var-name> <var-value>8</var-value> </var> </field> <!--绿色的为变量名,好像定义也有规则,必须是那样而resource 则是配置是否从资源文件中查找key --> <field property="email" depends="required,email"> <arg0 key="tip.email"/> </field> <!-- 验证年龄在一定范围之内 --> <field property="age" depends="required,intRange"> <arg0 key="tip.age"/> <arg1 key="${var:min}" name="intRange" resource="false"/> <arg2 key="${var:max}" name="intRange" resource="false"/> <var> <var-name>min</var-name> <var-value>1</var-value> </var> <var> <var-name>max</var-name> <var-value>100</var-value> </var> </field> </form> </formset> </form-validation>
4、编写消息资源文件 验证规则的配置文件中所用key的名字为该资源文件所配置 # errors.required={0}不能为空. # tip.username=用户名 # tip.userpass=密码 # errors.minlength={0}不能少于{1}个字符. # errors.email={0} 格式不合法. # tip.email=邮箱 # tip.age=年龄 # errors.range={0} 必须在 {1} - {2} 之间. errors.required={0}\u4e0d\u80fd\u4e3a\u7a7a. tip.username=\u7528\u6237\u540d tip.userpass=\u5bc6\u7801 errors.minlength={0}\u4e0d\u80fd\u5c11\u4e8e{1}\u4e2a\u5b57\u7b26. errors.email={0} \u683c\u5f0f\u4e0d\u5408\u6cd5. tip.email=\u90ae\u7bb1 tip.age=\u5e74\u9f84 errors.range={0} \u5fc5\u987b\u5728 {1} - {2} \u4e4b\u95f4.
5.在struts-config.xml中配置Action验证失败跳转页面,属性为input指向的地方 <html:errors/> <!--显示所有消息 --> <html:errors property="xx"/> <!--显示指定的消息-->
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %> <h1>用户注册</h1> <html:form action="reg.do" method="post"> <nested:nest property="user"> 用户名:<nested:text property="username"/><br/> 密码:<nested:text property="userpass"/><br/> </nested:nest> <html:submit value="提交"/> </html:form>
要使用该配置,在ActionForm中要实例化一个user对象才可以通过以上配置使用对象中username的属性 <hr> <h1>用户注册</h1> <html:form action="reg.do" method="post"> 用户名:<html:text property="user.username"/><br/> 密码:<html:text property="user.userpass"/><br/> <html:submit value="提交"/> </html:form> 上面的代码也可以实现刚才的功能,但是在验证框架中就不能那么使用了 <tiles:insert page="header.jsp" flush="true"/><!--标头内容 --> <h1>t1.jsp</h1> 111111111111111 <hr> <!--page表示所要插入的网页,flush是否及时更新 --> <tiles:insert page="footer.jsp" flush="true"/><!--末尾内容 --> 第二种情况是以一个定制了的模板生成个新的网页 <tiles:insert attribute="header"/> <tiles:insert attribute="footer"/> <tiles:insert page="template1.jsp" flush="true"> <!--已经存在一个template1.jsp模板 --> <tiles:put name="header" value="header.jsp"/> <!--往属性header设置嵌入页面 --> <tiles:put name="footer" value="footer.jsp"/> <!--往属性footer设置嵌入页面 --> </tiles:insert> this.saveToken(request); //在第一次点击请求的时候存入然后存转发到另一个JSP页面 //判断令牌是否有效; if(! this.isTokenValid(request) ){ //如果是刚才的页面转发过来的话则它返回真 saveToken(request); return ( new ActionForward(mapping.getInput()) ); //跳转到Action配置的input中的页面 } //最后正常执行完业务逻辑就把先前存的Token删除 request.removeAttribute(mapping.getAttribute()); this.resetToken(request); (2)动态ActionForm(对应的JAVA类是动态产生的,JAVA类中的属性在struts-config.xml文件中动态配置) <form action="dynaReg.do" method="post"> username:<input size=10 name="username"><br> userage:<input size=10 name="userage"><br> <input type="submit" value=" OK "> </form>
那么对应这个表单就要在Struts-config.xml中配置一个与其对应的form-bean <form-bean name="dynaRegForm" dynamic="true" type="org.apache.struts.action.DynaActionForm"> <!--指定该bean为动态的,并类型是该类 如果使用了动态FORMBEAN也想用验证框架的话这里的TYPE就要指定DynaValidatorActionForm --> <form-property name="username" type="java.lang.String"/> <form-property name="userage" type="java.lang.Integer" initial="0"/> </form-bean> ----------------------------------------------------
public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("add...."); request.setAttribute( "mathresult","add...." ); return mapping.findForward( "success" ); } protected Map getKeyMethodMap(){ Map map=new HashMap(); map.put("页面显示的按钮","本类中的业务方法名"); map.put("button.add ","add"); return map; } //add public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { int num1 = ((Math2Form) form).getNum1(); int num2 = ((Math2Form) form).getNum2(); request.setAttribute( "math2Result", ""+(num1+num2) ); request.removeAttribute(mapping.getAttribute()); return (mapping.findForward("success")); } <bean:message key="xxx"/> <html:submit property="action"> <bean:message key="button.add"/> </html:submit> <action path = "/jsp1" type = "org.apache.struts.actions.ForwardAction" parameter ="/jsp1.jsp" /> <action path = "/jsp1" forward="/jsp1.jsp" /> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-13
为什么这篇文章都没人回复呢??/
做shoppingcart的时候没做过验证 本来想试下这个,可是不是很熟悉 时间又不够 看了这贴子倒是收获蛮多的 |
|
返回顶楼 | |
发表时间:2008-10-14
我喜欢直接写javascript校验
|
|
返回顶楼 | |
发表时间:2008-10-14
我的博客也写过此类的文章。
http://blog.chinaunix.net/u/1096/showart_476630.html 另外这个系列也有包含tiles,国际化等内容的使用。 |
|
返回顶楼 | |
发表时间:2008-10-14
个人实践证明,无论struts1或struts2的验证框架,在复杂多变的业务系统开发中都是不可取的。
|
|
返回顶楼 | |
发表时间:2008-10-22
这都04年的技术吧
|
|
返回顶楼 | |
发表时间:2008-10-22
coder1982 写道 个人实践证明,无论struts1或struts2的验证框架,在复杂多变的业务系统开发中都是不可取的。
很支持 |
|
返回顶楼 | |
发表时间:2008-10-23
楼主列出的这些,自己以前在项目中都用到过。
不管怎么样,楼主总结的都是在用struts 的过程中非常常用的。 |
|
返回顶楼 | |
发表时间:2008-10-24
总结的不错,谢谢!不过用验证框架更方便!!
|
|
返回顶楼 | |
发表时间:2008-10-28
其实楼总结的东西,是一个很好的学习资料,但我想在实际的开发过程中,这些验证似乎不怎么实用,还是用JS验证要好。
|
|
返回顶楼 | |