|
- 在struts-config.xml必须设置需要验证的ActionForm
<action attribute="findSellForm" validate="true" input="/index.jsp" name="findSellForm" path="/findSell" scope="request" type="ucshop.action.FindSellAction" > <forward name="fail" path="/index.jsp" /> <forward name="success" path="/findsell.jsp" /> </action> validate默认值是true的,所以可以省略;如果不想验证,则设为false,这样的话,后面的就不用看了!
input要指明,检验流程:当执行validate方法时,返回的ActionErrors检查内部是否存在元素,有则返回到原来的input指定的页面;否则继续前进,执行Action的execute方法!到时候forward的fail和success才起作用!
- JSP页面
<html:form action="/findSell"> 物品分类: <html:select property="productType"> <html:option value="电脑配件"/> <html:option value="数码产品"/> <html:option value="运动用品"/> <html:option value="生活用品"/> <html:option value="户外用品"/> <html:option value="其他"/> </html:select> <br/><br/> 物品名称: <html:text property="name"/><html:errors property="sellname"/> <br/><br/> <html:submit value="搜索"/> </html:form> 注意: 加蓝的语句中property的值sellname是对应下面的validate()方法中的"errors.add("sellname", new ActionMessage("errors.productNameEmpty")); "的selllname!
- ActionForm的validate
下面的代码是struts的1.2版本的:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { //创建ActionErrors ActionErrors errors = new ActionErrors(); //物品名称的检验 if (getName() == null || getName().trim().equals("")) { errors.add("sellname", new ActionMessage("errors.productNameEmpty")); }
//返回ActionErrors return errors; }
自struts1.2, ActionError类都Deprecated,不再赞成使用,官方建议使用ActionMessage类,所以在struts1.2以下版本的,上面的"errors.add("sellname", new ActionMessage("errors.productNameEmpty")); "改为errors.add("sellname", new ActionError("errors.productNameEmpty")); 同时ActionErrors的GLOBAL_ERROR 被Deprecated,被ActionMessages.GLOBAL_MESSAGE 代替! ======================================== 有时候需要在Action的execute()方法里面进行例如权限的验证. 举个例子,validate()是检查用户名和密码数据是否为空,当用户输入了完整信息后,执行execute(),这时若发现"用户名或密码有误",,就需要显示错误信息
public class ServerValidationAction extends Action { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { /* * 权限验证 */ ServerValidationActionForm form = (ServerValidationActionForm) actionForm;
if (!form.getPassword().equals("password")) { ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionMessage( "errors.passwordwrong")); saveErrors(httpServletRequest, errors); return new ActionForward(actionMapping.getInput());
} return actionMapping.findForward("success"); } }
- WEB-INF文件夹的classes目录下创建一个文件夹xx,添加一个名为gb_ApplicationResources.properties的文件在xx文件夹里面,内容
errors.productNameEmpty=物品名称必须要填写 等于号左边的内容名字就是new AcionMessage("erors.productNameEmpty"));的value 创建文件内容为
native2ascii gb_ApplicationResources.properties ApplicationResources.properties 保存为native2ascii java.bat 注意,不要保存为native2ascii.bat,否则会死循环!同时这个文件和gb_ApplicationResources.properties在同一目录! 然后双击native2ascii java.bat,一会儿就会生成一个名为ApplicationResources.properties的文件!
- struts-config.xml添加<message-resources parameter="xx.ApplicationResources"/>
Ok,save,reload项目,run试试! 如果还不行,请检查上面的步骤遗漏了哪些!! 本文出自 “Java学习博客-追求完美” 博客,请务必保留此出处http://icansoft.blog.51cto.com/268543/56608 本文出自 51CTO.COM技术博客 |