Stripes視圖框架Java對象屬性驗證和prototype.js Ajax的測試

 Stripes視圖框架Java對象屬性驗證,它容許對字段設置是否必須填寫,對數字大小進行限制等。我用prototype.js Ajax 將驗證後的數據及時地展現出來,下面來看程序。javascript

一、編寫User實體類html

此用戶共三個屬性: name、email、age.java


  1. 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


  1. 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測試


  1. <%@ 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


四、測試表單提交數據異常處理

故意少輸入參數,頁面顯示請求不正常頁面:


產生的異常代碼提示:


  1. 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'.  

  2.     at net.sourceforge.stripes.validation.ScopedLocalizableError.getMessageTemplate(ScopedLocalizableError.java:164)  

  3.     at net.sourceforge.stripes.action.SimpleMessage.getMessage(SimpleMessage.java:91)  

  4.     at net.sourceforge.stripes.validation.SimpleError.getMessage(SimpleError.java:102)  

  5.     at net.sourceforge.stripes.tag.ErrorsTag.doEndTag(ErrorsTag.java:349)  

  6.     at org.apache.jsp.WEB_002dINF.userRegister_jsp._jspService(userRegister_jsp.java:109)  

  7.     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)  

  8.     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)  

  9.     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)  

  10.     ... 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.;效果以下圖所示:


至此,整個示例程序測試完畢。

相關文章
相關標籤/搜索