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

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

1、编写User实体类

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

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),我们要验证的是用户的数据合法的时候才展示用户数据。

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

pageEncoding="UTF-8"%>

html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

User-Register

function userHandleAjax() {

var myAjax = new Ajax.Updater(‘user‘,

‘‘,

{

method: ‘get‘,

parameters:Form.serialize(‘userForm‘)

});

}

Update user info: 

Name: 

Email: 

Age:

userInfo.jsp

pageEncoding="UTF-8"%>

uri="http://stripes.sourceforge.net/stripes.tld"%>

html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

User-Info

User‘s info

Hello ${actionBean.user.name}

Email: ${actionBean.user.email}

age: ${actionBean.user.age}

注:表单字段赋值:对象.属性 即user.name等等;而取值以$(actionBean.对象.属性),即${actionBean.user.name}等等;

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

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

572e5523e019022afec1cea24196d076.png

产生的异常代码提示:

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)

... 46more

当Stripes验证失败时,不知道怎样返回这些错误信息,解决方案也很简单:从 Stripes 包中复制一份 StripesResources.properties 到项目的源代码跟目录下(与WEB/classess同级)即可。加入StripesResources.properties文件后输入:name=boonya,[email protected],age=12.;测试效果如下图所示:

454e37209c686a53f6d4bfbddfd5dbd2.png

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

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

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

3459879f167cf26223884494c8e64a58.png

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

原文:http://sunl2014.blog.51cto.com/8889033/1532416

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中unicode显示乱码_Java 已知Java系统编码是GBK,jtextarea从一编码为Unicode的文本中读取数据,出现乱码,怎么正常显示?...

Java 已知Java系统编码是GBK,jtextarea从一编码为Unicode的文本中读取数据,出现乱码,怎么正常显示?关注:159 答案:2 mip版解决时间 2021-02-03 12:45提问者鉨瞞着所囿亾,爱着誰2021-02-02 16:35我觉得jtextarea中读取…

php怎么seo,怎样学习seo

学习seo的方法:1、从搜索引擎原理开始,学习seo要先从搜索引擎原理开始;2、多思考;3、学习seo要多看高质量的seo教程;4、多和seo高手交流,经常听听大神的seo理论,集百家之所长,这样会…

php ip 短时间 重复,php 限制同一个IP 一段时间不能评论多次,能给我详细解决的...

php 限制同一个IP 一段时间不能评论多次,能给我详细解决的mip版 关注:163 答案:3 悬赏:30解决时间 2021-01-25 15:27已解决2021-01-25 05:54php 限制同一个IP 一段时间不能评论多次,能给我详细解决的最佳答案2021-01-25 06:49在评论的操作中,都需要记录用户ip地址…

java 8 list,JAVA8 ListListInteger list中再装一个list转成一个list操作

我就废话不多说了&#xff0c;大家还是直接看代码吧~List collect IntStream.range(1, 10).boxed().collect(Collectors.toList());List collect1 IntStream.range(10, 20).boxed().collect(Collectors.toList());List> lists new ArrayList<>();lists.add(collect…

matlab中创建一个工程,从文件夹创建新工程

从文件夹创建新工程如果您有许多文件并希望将它们整理为一个工程(无论是否进行源代码管理)&#xff0c;请按照以下步骤创建一个新工程。使用 Simulink Start Page 中的 Folder to Project 模板可轻松将一个文件夹转换为工程。该模板会自动将您的文件添加到工程中&#xff0c;并…

Java定义变量x初始值为3,JAVA 第一章

第一章1.注释&#xff1a;一个好的开发习惯&#xff0c;应该是多编写注释&#xff0c;这样程序的可读性增强。单行注释// 单行注释 &#xff0c;只注释当前行多行注释/*多行注释多行注释*/javadoc 注释/**javadoc 注释javadoc 注释javadoc 注释*/注意&#xff1a;这种注释是比较…

血型算法php,血型排行榜!(真的很准)

一最容易动怒的人是&#xff1a;1.O 型&#xff1a;急性子&#xff0c;一点小事就能惹火他&#xff0c;性格中有好斗的一面&#xff0c;会以 " 我想发泄一下 " 为理由大发雷霆。2.B 型&#xff1a;看上去脾气很好&#xff0c;其实性情很直接&#xff0c;被愤怒冲昏头…

每个java小应用程序都得继承,JAVA复习题3

23.容器JFrame及JPanel默认的布局管理器分别是()A、FlowLayout和GridLayoutB、BorderLayout和FlowLayoutC、FlowLayout和FlowLayoutD、CardLayout和BorderLayout24.在开发一个JAVA GUI程序时&#xff0c;通常都要对按键事件作出响应和处理&#xff0c;一般需要在程序的开头写上…

anaconda下安装python,Windows下Anaconda的安装和简单使用方法

Anaconda is a completely free Python distribution (including for commercial use and redistribution). It includes over 195 of the most popular Python packagesfor science, math, engineering, data analysis.1、安装anaconda之前什么都不需要安装&#xff0c;直接在…

oracle免费云攻略,使用免费的Oracle云服务-创建云主机

上一篇我们讲了如何注册并使用Oracle的免费云服务&#xff0c;这篇我们讲如何创建免费的云主机。进入到控制台后&#xff0c;从左上角的菜单栏进入到Instances的管理界面&#xff1a;然后点击&#xff0c;则会进入创建云主机的界面。创建云主机真的非常简单&#xff0c;甚至你都…

oracle groupq by,oracle group by 性能优化

慕田峪9158850(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效)&#xff1a;ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名&#xff0c;FROM子句中写在最后的表(基础表 driving table)将被最先处理&#xff0c;在FROM子句中包含多个表的情况下,你必须选择记录…

oracle面向对象的数据类型,Oracle面向对象编程OOP

1.2.6 嵌套表AS TABLE OF嵌套表是表中之表&#xff0c;一个嵌套表是某些行的集合&#xff0c;它在主表中表示为其中的一列。对主表中的每一条记录&#xff0c;嵌套表可以包含多个行。语法如下&#xff1a;CREATE OR REPLACE TYPE table_name AS TABLE OF type;语法说明&#x…

oracle 序列验证脚本,oracle 生成序列脚本

今天在移植一个项目的的数据库时,要移动所有的序列,下面就是一个如何生成序列脚本的语句方法一:SELECT CREATE SEQUENCE ||SEQUENCE_NAME|| INCREMENT BY ||INCREMENT_BY || START WITH ||LAST_NUMBER|| MAXVALUE ||MAX_VALUE || CACHE ||CACHE_SIZE|| ORDER NOCYCLE ;FROM u…

php打开EXCEL过慢,打开excel很慢,编辑某个工作表很卡

一些啰嗦的话&#xff1a;同事一个office ,excel档有五个工作表&#xff0c;打开时非常慢的。进去后其中只要点击到两个工作表其中一个就很卡甚至没响应。试用wps打开流畅。但她坚持要用office说用惯了&#xff0c;没办法女人。这个文档接近3M&#xff0c;都是一些数据也没见有…

linux vim命令跳到67行,Linux学习之Vim/Vi使用(十三)

Linux学习之Vim/Vi使用Vim/Vi简介Vim/Vi工作模式Vim/Vi基本使用Vim/Vi应用技巧Vim/Vi简介Vim/Vi是一个功能强大的全屏幕文本编辑器&#xff0c;是Linux/UNIX上最常用的文本编辑器&#xff0c;它的作用是建立、编辑、显示文本文件。Linux下的编辑器最常用的就是vim或者vi文本编辑…

linux查看端口属性,linux如何查看系统属性指令?

linux是一款非常免费资源的操作系统&#xff0c;但是很多用户不知道怎么查看系统信息&#xff0c;今天小编就给大家带来了linux查看系统属性指令分享。喜欢的快点下载吧。linux查看系统属性指令分享1、查看cpu信息查看所有cpu信息&#xff1a;cat /proc/cpuinfo查看cpu类型&…

linux命令提示符不同,Linux命令提示符如何按照自己的习惯修改?

原本的 [rootlocalhost ]$ 看久了难免让人厌倦。如果按自己的习惯修改&#xff0c;既能看着舒服&#xff0c;又能提高“逼格”。下面小编就为大家详细介绍Linux命令提示符如何按照自己的习惯修改方法&#xff0c;希望能对大家有所帮助!美化Bash1、在目录下&#xff1a;vim .bas…

linux下如何为redis配置path,linux环境下如何启动redis

启动redisredis可执行文件说明&#xff1a;redis-server&#xff1a;redis服务器redis-cli&#xff1a;redis命令行客户端redis-benchmark&#xff1a;redis性能测试工具redis-check-aof&#xff1a;aof文件修复工具redis-check-dump&#xff1a;rdb文件检查工具1、直接启动直接…

linux从别的主机下载,从局域网内的其他Linux主机下载文件

Step 0本机与目标机都需要安装有openssh-server在本机与目标机上以root用户身份执行service ssh status # Debian上是ssh&#xff0c;openSUSE上是sshd&#xff0c;可以在键入ssh后紧接着按一下Tab键以自动补全该服务名# 或service --status-all | grep ssh # 通用可查看ssh服务…

c语言修改字符串c2133,通过create_string_buffer、create_unicode_buffer让C语言具备修改字符串的能力...

字符串的修改我们知道C中不存在字符串这个概念&#xff0c;python中的字符串在C中也是通过字符数组来实现的。我们说在C中创建一个字符数组有两种方式&#xff1a;char *s1 "hello world";char s2[] "hello world";这两种方式虽然打印的结果是一样的&…