Stripes视图框架Java对象属性验证和prototype.js Ajax的测试

Stripes视图框架Java对象属性验证,它允许对字段设置是否必须填写,对数字大小进行限制等。我用prototype.js Ajax 将验证后的数据及时地展示出来,下面来看程序。

1、编写User实体类

此用户共三个属性: name、email、age.

  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;  
        }  
          
          
      
    }

2、编写UserActionBean视图控制Action类

此类中包含了用户输入界面(userRegister.jsp)和用户数据提交完成后的数据展示界面(userInfo.jsp),我们要验证的是用户的数据合法的时候才展示用户数据。

  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表示绑定到的事件方法。

3、编写界面操作的Jsp文件

userRegister.jsp

<%@ 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}等等;

4、测试表单提交数据异常处理

故意少输入参数,页面显示请求不正常页面:

产生的异常代码提示:

  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 protected],age=12.;测试效果如下图所示:

此时,年龄验证错误;但是Stripes的错误消息已经知道该怎么提示错误信息给用户了。

5、测试正确的验证和Ajax效果

在表单输入框中输入符合验证条件的数据如:name=boonya,[email protected],age=23.;效果如下图所示:

至此,整个示例程序测试完毕。

Stripes视图框架Java对象属性验证和prototype.js Ajax的测试

时间: 2024-10-22 17:43:22

Stripes视图框架Java对象属性验证和prototype.js Ajax的测试的相关文章

Stripes视图框架实现纯Java代码控制表现层参考文档

Stripes是一个开放源码的Web应用程序框架的基础上的模型 - 视图 - 控制器(MVC)模式.它的目的是通过使用Java技术,如在Java 1.5.x或以上版本中引入,实现"约定优于配置"的注解和泛型,它比Struts2框架更轻量.Stripes强调一组简单的约定整个框架的想法,减少配置的开销.在实践中,这意味着几乎没有Stripes的应用程序需要的任何配置文件,从而降低开发和维护工作. 1.Stripes特性 行动基于MVC框架 没有配置文件 POJO的 注解取代XML配置文件

Stripes视图框架简介

Stripes第一次接触就觉得它很神奇,不禁让喜欢编码的程序员产生好奇心.是什么让他做到了灵活自如的进行页面跳转呢? Stripes是一个视图框架用于利用最新的Java技术来构建Web应用程序.它具有以下特点: 不需要对每一action进行映射配置(ActionBeans将自动被发现,它利用注释进行配置).支持:action转发.servlet请求.Rest风格请求. 强大的绑定引擎用于构建复杂并脱离请求参数(request parameter)的web对象. 易于使用并可本地化的验证与类型转换

Stripes视图框架实现ActionBean视图访问

Stripes最基本的实现是类似于Struts的请求,但没有Struts那么配置繁琐.下面就来看看怎样实现一个web应用的Action访问操作.本篇博文为设计Stripes的三种访问方式:普通Action的映射访问.类Servlet访问方式.Rest变参访问方式.前几天还没将Stripes应用示例打通,今天又本着不解决问题死不罢休的精神继续去弄,终于搞明白了. 1.编写Stripes的web.xml配置文件 该文件定义了第三方的工具包.过滤器类.以及映射关系和访问格式:在此配置文件中有两种Str

Stripes视图框架内置Spring集成的使用

Stripes视图框架内置Spring集成了的,在项目中也遇到需要导入spring支持的jar包,这足以证明Stripes与Spring有着非同寻常的关系. Spring注入Java Bean 我们需要将Spring beans或业务对象自动地注入到需要进行处理或引用的对象上.在Stripes框架中,实现这一点并不要求外部配置-除了你的Spring上下文配置之外.上下文配置如下: <context:component-scan  base-package="com.boonya.strip

Java 对象属性的遍历

package com.cn.mybatis.test; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Date; import org.apache.ibatis.

java bean 对象属性复制框架BeanMapping-01-入门案例

项目简介 Bean-Mapping 用于 java 对象属性赋值. 项目中经常需要将一个对象的属性,赋值到另一个对象中. 常见的工具有很多,但都多少不够简洁,要么不够强大. 特性 支持对象属性的浅拷贝 变更日志 变更日志 快速开始 准备 JDK1.8 及其以上版本 Maven 3.X 及其以上版本 maven 项目依赖 <dependency> <groupId>com.github.houbb</groupId> <artifactId>bean-mapp

Java对象校验框架之Oval

只要有接口,就会有参数的校验,目前开源的校验框架已经非常多了,不过不得不提一下Oval.OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件.Annotation.POJOs 进行设定.可以使用纯 Java 语言.JavaScript .Groovy .BeanShell 等进行规则的编写.使用起来也非常简单 public class OvalTest { @Min(20) private int age; @Length(min = 6, max = 10) priva

Android Studio NDK 入门教程(5)--Java对象的传递与修改

概述 本文主要Java与C++之间的对象传递与取值.包括传递Java对象.返回Java对象.修改Java对象.以及性能对比. 通过JNIEnv完成数据转换 Java对象是存在于JVM虚拟机中的,而C++是脱离JVM而运行的,如果在C++中访问和使用Java中的对象,必然会使用JNIEnv这个桥梁.其实通过下面的代码很容易看出,这种访问方式和Java中的反射十分雷同. 这里定义一个简单Java对象用于下文测试: package com.example.wastrel.hellojni; /** *

使用XStream注解实现Java对象与XML互相转换的代码示例

本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例.    我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等.虽然他们的功能非常强大,但在使用上还是有点不那么习惯.对于格式比较固定的XML文档,它的结构没有变化或是很少变化,这时将它转换成我们熟悉的Java对象来操作的话,会使工作变得更容易一些,而xstream正好可以满足这一点.    本文所用xstream的版本为:1.4.7 <dependency>