浏览 2332 次
锁定老帖子 主题:struts1.2验证框架续
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-20
最后修改:2009-09-21
代码级验证:ActionForm, ActionErrors validate(), 1, new ActionErrors 2, 进行验证 3, errors.add("xx",new ActionMessage(xxx)) 4, saveErrors(request, errors); saveMessages(request, errors); <html:messages message="true|false/*取错误还是消息*/" id property /> 框架验证:1,资源文件,里面有错误消息 2,validation.xml / validator-rules.xml DTD是从validator-rules.xml拷过来的. 3,ActionForm基类 ValidatorForm, validatorActionForm,DynaValidatorForm,DynaValidatorActionForm. 凡是加了action的,那么在validation.xml中的form的name为action的path,否 则是action的name. 4,去掉validate() 5,action配置里保证validate是true 6,struts-config.xml中加<Plug-in> validation.xml配置: <form-set> <form name="action.name|action.path"> <field property="xx/a[1]" depends=""> <arg name="哪一个验证规则,不写对所有的验证规则" key="" resource="true|false" /> <msg name="哪一个验证规则,不写对所有的验证规则" key="" resource="true|false" /> <var> <var-name>minlength,maxlength,mask,validwhen(*this*==123,"123",password)->test,intRange->min/max,required,email /> <var-value> </field> </form> <form> </form> </form-set>自定义验证规则,修改validator-rules.xml classname="" method="" public static boolean validateXXX(Object bean,Field field,... 类Resources.getActionMessage(... ---------------------------------------------------------------------------- DispatchAction(分发Action) public class CompulateAction extends DispatchAction { // 分发类Action是不写execute方法的. // DispatchAction的对应关系:页面表单里有隐藏表单域name为a // 在struts-config.xml中的对应的action的配置段中其parameter也为a. // 页面提交时, 其隐藏表单域a的值就对应方法名. public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response throws Exception { return null; } }--------------- LookupDispatchAction // LookupDispatchAction // 需要用到资源文件做桥梁, 来完成页面的提交按钮和方法名之间的对应关系. // 在struts-config.xml中把对应的action的配置段中其parameter值为提交按钮的名字. ApplicationResource.properties: label.add=+ label.sub=- label.multi=* label.div=/ 页面(必须要用struts标签): <html:submit property="method"> <bean:message key="label.add" /> </html:submit> protected Map getKeyMethodMap() { Map rtn = new HashMap(); rtn.put("label.add", "add"); rtn.put("label.sub", "sub"); rtn.put("label.multi", "multi"); rtn.put("label.div", "div"); return rtn; }---------------- // MappingDispatchAction和DispatchAction的代码是完全一致的 // 不同的方法可能对应不同的Form和Forward // 思路:在struts-config.xml中分为逻辑上独立的一些Action. // 此时action配置段中的其parameter值就是方法名. // 可以对不同的方法做不同的验证. // 对于验证框架, 这是最优先的选择. ------------------- EventDispatchAction <action .. parameter="save,back,recalc=recalculate.default=save"/> public DynaBean getUserById(Integer id) { LazyDynaBean rtn = new LazyDynaBean(); List<User> userList = dao.findByProperty("userId", id); if(userList!=null && userList.size()>0) { rtn.set("userId", userList.get(0).getUserId()); } } // 我们欺骗一下struts DynaBean rtn = service.getUserByid(); request.setAttribute("userForm" rtn); ------------------------------------------------ 如何做DispatchAction验证 MyFieldChecks类: 修改ActionServlet和init方法. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |