关于Struts2的手工代码检验示例
2010-10-27 22:09
337 查看
Struts2的检验机制是先从表单得到数据,然后进行数据格式转换,如果在转换时出现异常则把错误信息封装进FieldErrors集合中,然后无论转换是否成功则会调用Action的检验方法,首先会调用Action的指定方法检验即ValidateXxx()方法,然后再是Validate方法,此方法会对Action内的所有方法进行检验,在检验到错误时会把错误信息封装进FieldErrors内。最后如果FieldErrors集合的长度不为0则调用Action的input视图用于显示错误信息,在JSP文件内可以用<s:fielderror>标签显示错误信息。
为便于说明特做一示例程序。在项目下编辑index.jsp页面,用于实现表单数据的接收,内容如下:
为表单中的数据创建一个JavaBean类:user.java
创建一个UserAction类用于演示手工代码,此类必须显式的继承ActionSupport类。
在这个类中表单会把调用register方法处理数据,因此validateRegister方法是专门针对register方法检验,如果检验到错误的话则把错误信息用addFieldError封装进FieldErrors集合中,假设此类中还有一个update方法也需要检验的话则还要新增一个名为validateUpdate的方法,总之,在这些检验方法调用完毕后才会调用validate方法检验,当所有的检验方法都完毕后再判断FieldErrors集合的长度,如果长度大于0则说明集合内有错误信息,则直接调用此Action类的input视图显示错误信息,如无错误则执行相应的方法,此类中为register方法。
类型转换类
相应的转换配置文件和UserAction放于同一个包内,文件名为UserAction-conversion.properties
struts.xml配置文件内容
userinfo.jsp用于输出结果
为便于说明特做一示例程序。在项目下编辑index.jsp页面,用于实现表单数据的接收,内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> --> </head> <body> <h1>用户信息验证</h1> <hr/> <form action="test/user_register" method="post"> 姓名:<input type="text" name="user.name"/><br/> 性别:<input type="radio" name="user.sex" value="男" checked="checked"/>男 <input type="radio" name="user.sex" value="女"/>女<br/> 手机:<input type="text" name="user.phone"/><br/> 生日:<input type="text" name="user.birthday"/><br/> <input type="submit" value="注册"/> <s:fielderror></s:fielderror> </form> </body> </html>
为表单中的数据创建一个JavaBean类:user.java
package bean; import java.util.Date; public class User { private String name; private String sex; private String phone; private int age; private Date birthday; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
创建一个UserAction类用于演示手工代码,此类必须显式的继承ActionSupport类。
package web.action; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.regex.Pattern; import bean.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String register() { ActionContext.getContext().put("user", user); return "success"; } @Override public void validate() { // 此方法将对此Action内的所有方法进行检验, // 并在其他检验方法结束完后最后运行 if (user.getBirthday() == null) this.addFieldError("user.birthday", "生日必须输入且格式必须正确!"); } public void validateRegister() { // 此方法用于针对register方法所需要的数据检验 // 此处故意不对生日字段时行检验 if (user.getName() == null || user.getName().equals("")) this.addFieldError("user.name", "用户名必须输入"); if (user.getPhone() == null || user.getPhone().equals("")) this.addFieldError("user.phone", "手机号码必须输入"); else { if (Pattern.compile("^1[358]//d9$").matcher(user.getPhone()) .matches()) { this.addFieldError("user.phone", "手机号格式错误!"); } } } }
在这个类中表单会把调用register方法处理数据,因此validateRegister方法是专门针对register方法检验,如果检验到错误的话则把错误信息用addFieldError封装进FieldErrors集合中,假设此类中还有一个update方法也需要检验的话则还要新增一个名为validateUpdate的方法,总之,在这些检验方法调用完毕后才会调用validate方法检验,当所有的检验方法都完毕后再判断FieldErrors集合的长度,如果长度大于0则说明集合内有错误信息,则直接调用此Action类的input视图显示错误信息,如无错误则执行相应的方法,此类中为register方法。
类型转换类
package bean.conversion; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class ConverDate extends StrutsTypeConverter { @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { // TODO Auto-generated method stub Date date = null; if(arg1[0]==null) return null; DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try{ date = df.parse(arg1[0]); }catch (Exception e){ e.printStackTrace();//在控制台抛出异常 date = null; } return date; } @Override public String convertToString(Map arg0, Object arg1) { // TODO Auto-generated method stub Date date = (Date)arg1; return arg1.toString(); } }
相应的转换配置文件和UserAction放于同一个包内,文件名为UserAction-conversion.properties
user.birthday=bean.conversion.ConverDate
struts.xml配置文件内容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="vaildate" extends="struts-default" namespace="/test"> <action name="user_*" class="web.action.UserAction" method="{1}"> <result name="success">/WEB-INF/userinfo.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts>
userinfo.jsp用于输出结果
<body> ${user.name }<br/> ${user.sex }<br/> ${user.phone }<br/> ${user.birthday }<br/> </body>
相关文章推荐
- java_struts2手工编写代码实现对Action中的输入数据校验
- MSDN上关于ADO示例代码
- 关于单点登陆的示例代码
- Struts2动态结果集代码示例
- 关于三级联动下拉框的示例代码
- Struts2手工编写表单验证代码
- 关于Java中多线程死锁的代码示例
- BUG:InstallShield 2012 Spring之前版本的帮助文档中关于StrGetTokens示例代码的错误
- .NET中 关于脏读 不可重复读与幻读的代码示例
- Struts2 POI导出Excel 基本思路解析及相关示例代码
- 关于WPF的Button 的click事件调用 code UI 代码的示例(有益于快速的自动化)
- 关于压缩包上传和下载示例代码
- struts2的自定义验证框架——示例代码
- .NET中 关于脏读 不可重复读与幻读的代码示例
- Struts2手工编写代码实现对Action中所有方法输入校验
- C#中关于委托和事件的示例代码
- C#中关于多线程编程的示例代码
- 《关于SQL语句的自动生成!》一文的代码调用示例
- 关于margin-left的示例代码
- 关于mina的文件上传代码示例