Stripes視圖框架Java對象屬性驗證,它容許對字段設置是否必須填寫,對數字大小進行限制等。我用prototype.js Ajax 將驗證後的數據及時地展現出來,下面來看程序。javascript
一、編寫User實體類html
此用戶共三個屬性: name、email、age.java
package com.boonya.stripes.entity; public class User { private String name; private String email; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
二、編寫UserActionBean視圖控制Action類
apache
此類中包含了用戶輸入界面(userRegister.jsp)和用戶數據提交完成後的數據展現界面(userInfo.jsp),咱們要驗證的是用戶的數據合法的時候才展現用戶數據。app
package com.boonya.stripes.actions; import com.boonya.stripes.entity.User; import net.sourceforge.stripes.action.DefaultHandler; import net.sourceforge.stripes.action.ForwardResolution; import net.sourceforge.stripes.action.Resolution; import net.sourceforge.stripes.action.SessionScope; import net.sourceforge.stripes.validation.Validate; import net.sourceforge.stripes.validation.ValidateNestedProperties; @SessionScope public class UserActionBean extends AbstractActionBean { private static final long serialVersionUID = 1L; protected static final String REGISTER="/WEB-INF/userRegister.jsp"; protected static final String USER_INFO="/WEB-INF/userInfo.jsp"; @ValidateNestedProperties({ @Validate(field ="name",required=true,on = {"viewUserInfo"}), @Validate(field ="email",required=true,on = {"viewUserInfo"}), @Validate(field ="age", required = true, minvalue = 13, on = {"viewUserInfo"}) }) private User user; @DefaultHandler public Resolution register() { return new ForwardResolution(REGISTER); } public Resolution viewUserInfo(){ return new ForwardResolution(USER_INFO); } public void setUser(User user) { this.user = user; } public User getUser() { return user; } }
注:@ValidateNestedProperties 驗證對象包含的特殊屬性字段值的限制;@Validate 具體驗證的字段。filed表示字段、required表示是否必需、on表示綁定到的事件方法。框架
三、編寫界面操做的Jsp文件jsp
userRegister.jspide
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld"%> <html> <head> <title>User-Register</title> <script src="../js/prototype.js" type="text/javascript"></script> <script type="text/javascript"> function userHandleAjax() { var myAjax = new Ajax.Updater('user', '<stripes:url beanclass="com.boonya.stripes.actions.UserActionBean" event="viewUserInfo"/>', { method: 'get', parameters:Form.serialize('userForm') }); } </script> </head> <body> <stripes:errors globalErrorsOnly="false"/> <stripes:form beanclass="com.boonya.stripes.actions.UserActionBean" id="userForm"> Update user info: <br> Name: <stripes:text name="user.name" /> <br> Email: <stripes:text name="user.email" /> <br> Age:<stripes:text name="user.age" /> <br> <stripes:button name="PrototypeAjax" value="Go to User View" onclick="userHandleAjax()" /> <div id="user"></div> </stripes:form> </body> </html>
userInfo.jsp測試
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <title>User-Info</title> <body> <h4>User's info</h4><br/> Hello <font color="red">${actionBean.user.name}</font> <br /> Email: <font color="blue">${actionBean.user.email}</font> <br /> age: <font color="blue">${actionBean.user.age}</font> <br> </body> </html>
注:表單字段賦值:對象.屬性 即user.name等等;而取值以$(actionBean.對象.屬性),即${actionBean.user.name}等等;ui
四、測試表單提交數據異常處理
故意少輸入參數,頁面顯示請求不正常頁面:
產生的異常代碼提示:
Caused by: java.util.MissingResourceException: Could not find an error message with any of the following keys: 'com.boonya.stripes.actions.UserActionBean.user.age.valueNotPresent', 'com.boonya.stripes.actions.UserActionBean.user.age.errorMessage', '/actions/User.action.user.age.valueNotPresent', '/actions/User.action.user.age.errorMessage', 'user.age.valueNotPresent', 'user.age.errorMessage', 'com.boonya.stripes.actions.UserActionBean.valueNotPresent'.com.boonya.stripes.actions.UserActionBean.errorMessage', '/actions/User.action.valueNotPresent', '/actions/User.action.errorMessage', 'validation.required.valueNotPresent'.
at net.sourceforge.stripes.validation.ScopedLocalizableError.getMessageTemplate(ScopedLocalizableError.java:164)
at net.sourceforge.stripes.action.SimpleMessage.getMessage(SimpleMessage.java:91)
at net.sourceforge.stripes.validation.SimpleError.getMessage(SimpleError.java:102)
at net.sourceforge.stripes.tag.ErrorsTag.doEndTag(ErrorsTag.java:349)
at org.apache.jsp.WEB_002dINF.userRegister_jsp._jspService(userRegister_jsp.java:109)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
... 46 more
當Stripes驗證失敗時,不知道怎樣返回這些錯誤信息,解決方案也很簡單:從 Stripes 包中複製一份 StripesResources.properties 到項目的源代碼跟目錄下(與WEB/classess同級)便可。加入StripesResources.properties文件後輸入:name=boonya,email=boonyachengdu@gmail.com,age=12.;測試效果以下圖所示:
此時,年齡驗證錯誤;可是Stripes的錯誤消息已經知道該怎麼提示錯誤信息給用戶了。
五、測試正確的驗證和Ajax效果
在表單輸入框中輸入符合驗證條件的數據如:name=boonya,email=boonyachengdu@gmail.com,age=23.;效果以下圖所示:
至此,整個示例程序測試完畢。