ActionForm中对表单元素进行校验 @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (StringUtils.isBlank(regUser.getUsername())){ errors.add("username",new ActionMessage("用户名不能为空",false)); } return errors; } JSP中需要显示错误信息 第一种:${requestScope.get("org.apache.struts.action.ERROR")}<br/> 第二种:${requestScope["org.apache.struts.action.ERROR"]}<br/> 第三种:使用<html:errors>标签,首先需要配置国际化资源包 <message-resources parameter="org.zln.struts.resource.errors"/> 在validate校验方法中 errors.add("username",new ActionMessage("error.username"));//这里的error.username是资源文件配置的key 在jsp中 <html:errors/><br/>就可以对错误信息进行输出。输出的是ActionErrors对象的值,是key对应的值还是硬编码值,取决于ActionMessage对象的初始化参数 注意:资源文件查找的顺序:语言_国家->语言->操作系统相关->默认资源文件
errors.footer=</ul><hr> errors.header=<h3><font color="red">Validation Error</font></h3><p>You must correct the following error(s) before proceeding:</p><ul> errors.prefix=<li> errors.suffix=</li> <html:errors property="username" footer="" header="" prefix="" suffix=""/> 如果配置了footer,国际化文件中的errors.footer就不会生效
表单校验只适合进行基本的字段校验,但是对于一些复杂的逻辑性校验,需要在Action中进行校验 package org.zln.struts.action; import org.apache.struts.action.*; import org.zln.struts.form.RegUserForm; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Created by sherry on 000020/5/20 20:37. */ public class RegUser extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { RegUserForm regUserForm = (RegUserForm) form; /*ActionMessages是ActionErrors的父类*/ ActionMessages errors = new ActionMessages(); request.setAttribute("username",regUserForm.getRegUser().getUsername()); /*业务逻辑校验*/ if (!"zln".equals(regUserForm.getRegUser().getUsername().trim())){//假设数据库中获取到的用户名是 zln errors.add("username",new ActionMessage("用户不存在",false)); /*将错误信息保存到request作用域中*/ this.saveErrors(request,errors);//request.setAttribute(Globals.ERROR_KEY, errors); //return mapping.findForward("FAILURE"); return mapping.getInputForward(); } return mapping.findForward("SUCCESS"); } } 页面中对于错误信息的输出,与表单校验是一样的
国际化->参数化
资源文件 error.empty={0}can't be empty 填写参数 errors.add("username",new ActionMessage("error.empty",new String[]{"用户名"})); “用户名”,这个参数也可以国际化