- 浏览: 346424 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (160)
- webservice (2)
- 数据库开发 (9)
- LINUX (6)
- 团队协作 (5)
- 前端技术 (4)
- J2EE (31)
- web服务器 (9)
- 经验常识 (13)
- 开发工具 (17)
- 项目管理 (7)
- 重构与设计模式 (8)
- 安全技术 (1)
- 并发编程 (1)
- 移动互联网 (2)
- 编码风格 (1)
- 领域建模 (1)
- 随想杂记 (12)
- 翻译 (2)
- 问题排查 (2)
- 数据挖掘 (4)
- 软件架构 (1)
- java语言基础知识 (13)
- 文件读写 (1)
- mac研发笔记 (1)
- 网络问题 (1)
- python学习 (0)
- Java8新特性 (1)
- soft kes collections (1)
最新评论
-
cremains:
...
java8新特性学习笔记 -
bingyingao:
guooo 写道很好的总结,不知能否转载?可以,多谢关注
又四年了,再看如何快速融入一个新团队 -
guooo:
很好的总结,不知能否转载?
又四年了,再看如何快速融入一个新团队 -
omeweb:
又过了好几年了,有啥新感悟没有?
两年已过去,再看该如何快速融入新团队 -
kely39:
感谢楼主,问题已解决
包冲突问题的解决方法
struts2总结
以前在项目中对于表单字段的验证,基本都是在action具体方法中,也没有用到struts的validate,现在进入新公司了,我感觉有必要梳理一下前的做法。
这两天稍有空隙,对struts的验证框架使用进行了一些尝试总结,随后也打算对struts框架的各个方面都做一次比较详尽的开发级别的总结,方便将来的查看,避免因遗忘而导致的重复无谓的学习,网上有很多这方面资料,但我感觉,只有自己总结提炼出来的,才会理解深刻...
struts的验证可以有两种实现方式:
1.利用action名-validate.xml配置的方式。
2.在具体action中重写validate()方法。
首先看第一种(配置文件)代码示例:
jsp代码
action代码:
struts.xml配置:
验证框架的配置(action类名+validate-xml的文件,放置于com包中,struts2会自动找到它)
<!--在struts2中已经实现了很多常用验证,可以根据需要选用:
再看一下重写validate方法的代码实现
先区分一下几个不同的概念:
this.addFieldError("key",message);
一旦不为空将会跳转到input,用<s:fielderror/>标签显示.可以指定fieldname(集合中得key)属性来达到分开显示指定的验证信息。
this.addActionError("");
一旦不为空将会跳转到input,用<s:actionerror/>标签显示.
this.addActionMessage("");
这个只是一个提示信息,在下文页面中用<s:actionmessage/>展示集合中得全部message。
jsp代码:
java代码
struts.xml配置
目前我有疑问的地方希望与有经验的朋友交流一下:
1.一旦做了validate的验证。
那么所以流经这个action类的请求都将经历一次验证,而实际上在一个action类中我只有一个方法需要验证,这就增添了麻烦。
2.利用上文中的第一种方式实现,致使每次进入action之前又多读取一个xml文档,这样会不会导致效率的降低,如果有影响,那么程度如何。
第一回 validate框架的使用
以前在项目中对于表单字段的验证,基本都是在action具体方法中,也没有用到struts的validate,现在进入新公司了,我感觉有必要梳理一下前的做法。
这两天稍有空隙,对struts的验证框架使用进行了一些尝试总结,随后也打算对struts框架的各个方面都做一次比较详尽的开发级别的总结,方便将来的查看,避免因遗忘而导致的重复无谓的学习,网上有很多这方面资料,但我感觉,只有自己总结提炼出来的,才会理解深刻...
struts的验证可以有两种实现方式:
1.利用action名-validate.xml配置的方式。
2.在具体action中重写validate()方法。
首先看第一种(配置文件)代码示例:
jsp代码
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>配置文件的错误验证处理</title> <s:head/> <body> <s:form action="validate.action" validate="true"> <s:textfield name="realName" /><s:fielderror fieldName="realName" /><!--令fieldName为响应的textfield名字,则可以单独分开显示各属性的验证结果,而不是把所有的验证结果都展示出来--><br/> <s:textfield name="phone" ></s:textfield><s:fielderror fieldName="phone" /><br/> <s:submit/> </s:form> </body> </html>validate.jsp
action代码:
package com; import com.opensymphony.xwork2.ActionSupport; public class ValidateTestAction extends ActionSupport { private String realName; private String phone; public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String toValidate() { return SUCCESS; } public String doValidate() { System.out.println("realName:" + realName + "\tphone:" + phone); return SUCCESS; } }ValidateTestAction.java
struts.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.ui.theme" value="simple" /> <!-- 配置不要自动生成table元素 --> <package name="abc" extends="struts-default" > <!-- struts校验框架测试类 --> <action name="validate" class="com.ValidateTestAction"> <result name="input">/validate.jsp</result><!--使用验证框架则必须配置input --> </action> </package> </struts>struts.xml
验证框架的配置(action类名+validate-xml的文件,放置于com包中,struts2会自动找到它)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" > <validators > <field name ="realName" > <field-validator type ="requiredstring" > <!--requiredstring验证非空,验证顺序为自上而下,即同一个字段的多种提示信息不会同时展示于页面 --> <message>真实姓名不能为空 </message> </field-validator > <field-validator type="stringlength"> <!--stringlength验证字符串长度 --> <param name="maxLength">10</param> <message> 姓名必须在10字以内 </message> </field-validator> </field> <field name ="phone" > <field-validator type ="requiredstring" > <message>手机号码不能为空 </message> </field-validator > </field> </validators>ValidateTestAction-validation.xml
<!--在struts2中已经实现了很多常用验证,可以根据需要选用:
< validators > < validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" /> < validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" /> 非空 < validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" /> 输入为int < validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" /> 输入为double < validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" /> 输入为date < validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" /> < validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" /> < validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" /> < validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" /> < validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" /> < validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" /> < validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" /> 字符串长度 < validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" /> </validators > -->
再看一下重写validate方法的代码实现
先区分一下几个不同的概念:
this.addFieldError("key",message);
一旦不为空将会跳转到input,用<s:fielderror/>标签显示.可以指定fieldname(集合中得key)属性来达到分开显示指定的验证信息。
this.addActionError("");
一旦不为空将会跳转到input,用<s:actionerror/>标签显示.
this.addActionMessage("");
这个只是一个提示信息,在下文页面中用<s:actionmessage/>展示集合中得全部message。
jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>验证数据</title> </head> <body> <s:actionerror/> <s:form action="overVali!doOverValidate.action"> hello:<s:textfield name="msg"/> <s:fielderror name="msg" fieldName="msgMsg"/> <br/> phone : <s:textfield name="phone" /> <s:fielderror name="phone" fieldName="phoneMsg" /><br/> <s:submit/> </s:form> </body> </html>overwritevalidate.jsp
java代码
package com; import com.opensymphony.xwork2.ActionSupport; public class OvenWriteValidateAction extends ActionSupport { private String msg; private String phone; public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } /** * 这样做存在一个问题,即凡是进入该action类的请求都将强制验证。 */ public void validate() { if (msg==null||"".equals(msg)) { System.out.println(INPUT); this.addFieldError("msgMsg", "必须输入msg!"); this.addActionError("处理动作失败!"); } if(phone==null||"".equals(phone)){ this.addFieldError("phoneMsg", "必须输入手机号!"); } else { this.addActionMessage("提交成功"); } /** * * * 大家从上面的代码可以看出,Field错误需要一个key(一般用来表示是哪一个属性出的错误) * 而Action错误和Action消息只要提供一个信息字符串就可以了。 */ } public String test() { return SUCCESS; } public String doOverValidate() { return SUCCESS; } }OvenWriteValidateAction.java
struts.xml配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.ui.theme" value="simple" /> <!-- 配置不要自动生成table元素 --> <package name="abc" extends="struts-default" > <global-results> <result name="success">/success.jsp</result> </global-results> <!-- struts校验框架测试类 --> <action name="overVali" class="com.OvenWriteValidateAction"> <result name="input">/overwritevalidate.jsp</result><!--使用验证框架则必须配置input --> </action> </package> </struts>struts.xml
目前我有疑问的地方希望与有经验的朋友交流一下:
1.一旦做了validate的验证。
那么所以流经这个action类的请求都将经历一次验证,而实际上在一个action类中我只有一个方法需要验证,这就增添了麻烦。
2.利用上文中的第一种方式实现,致使每次进入action之前又多读取一个xml文档,这样会不会导致效率的降低,如果有影响,那么程度如何。
发表评论
-
log4j关键点
2013-09-25 19:43 1019日志级别 级别顺序(低到高): DEBUG < INFO ... -
java集合排序
2013-09-24 19:18 1089java对象集合排序在开发中使用非常广泛,需要重点理解,而它实 ... -
关于java.lang.OutOfMemoryError的参数配置误区
2013-09-10 15:10 1080这两天在本机用eclipse的jetty插件跑项目,老是抛出一 ... -
spring这样的来配置一些常量很方便
2013-09-03 09:48 2458<util:list id="haidilao ... -
快速查找线程死锁(展苍)
2012-12-23 13:25 0Thread dump Thread dump是比较容易查找 ... -
javap查看虚拟机为你做了什么
2012-12-02 15:38 526public class Test { publi ... -
javaweb开发乱码问题整理
2012-03-15 14:01 961j2ee方面的开发总会遇到各种各样的乱码问题,总想抽空整理一下 ... -
用正则表达式扣出字符串中指定的多处内容
2011-12-26 15:29 1412截取打印出所有<record></recor ... -
java反射机制学习
2011-11-19 13:01 1012反射基本概念: 在java ... -
java匿名内部类使用场景列举
2011-11-18 10:57 2575java内部类是怎么一回事?匿名内部类何时会用到,之前一直很模 ... -
使用UUID生成32位ID
2011-11-14 11:11 21288UUID(Universally Unique Identif ... -
java数据类型介绍
2011-11-09 14:34 930java数据类型介绍 简单类型大小范围/精度 ... -
Exception点滴
2011-11-08 14:24 918java.lang.reflect.UndeclaredThr ... -
将set集合转为list并对对象进行排序
2011-11-06 15:09 7704之前用hibernate的时候,遇到一对多的表结构。比如班级( ... -
src地址为空导致两次进入到action请求地址
2011-10-29 13:05 1495今天用struts开发一个页面,奇怪的是我点了一次提交,达到目 ... -
struts标签与ognl表达式用法点滴
2011-10-27 18:43 1370struts标签的使用中,会涉及一些比较细的点儿,汇总一下,以 ... -
struts2第四回:工作流程解析
2011-10-14 15:18 838这两天没什么任务,就想研究一下struts2的源码,看了半天, ... -
struts2第三回:自定以拦截器
2011-10-13 19:14 1065实现一个拦截器并调用。 ============下面是Logi ... -
struts2第二回:防止重复提交
2011-10-13 18:51 2234基本原理:用户访问做了重复提交的页面,服务器会生成一个令牌,这 ... -
include与jsp:include与s:action与s:include与iframe用法汇总
2011-10-13 13:47 206531.<%@ include file="../ ...
相关推荐
[浪曦原创]Struts系列 第5讲 Struts的验证框架Validate使用续一(zk001)
struts2学习教程包括:第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传...
第1章 Struts过时了吗? 10 1.1 Struts历史发展过程 10 1.2 Struts2的“简历” 13 1.2.1 标签库介绍 13 1.2.2 拦截器应用目的 14 1.2.3 FilterDispatcher和Action概述 14 1.2.4 Struts2配置文件处理 15 1.2.5 OGNL...
struts2验证 其中分为手动复写validate 和 使用框架验证
8. Struts的validate框架是如何验证的? 在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。 9. 说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler...
1. 介绍.........................................................................................................18 1.1. 关于本书..........................................................................
1. 介绍.........................................................................................................18 1.1. 关于本书...........................................................................
第一步:数据库设计(详情见dangdang.sql) d_book:图书信息表 d_product:产品信息表(各种类型产品所具有的共同信息项) d_category:图书栏目(分类)表 d_category_product:栏目与产品对应关系表 d_order:订单...
Struts的validate框架是如何验证的? 74 72.11. dispatchAction是用什么技术实现的? 74 72.12. struts2.0的mvc模式?与struts1.0的区别? 74 72.13. struts1.2和struts2.0的区别?如何控制两种框架中的单例模式? ...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
本课程共21讲,课程课件,上课源代码等资料购买后可以直接下载,该课程是在学习完JSP课程后,SSH框架的第一部分,后续还有Hibernate,Spring课程及3大框架的整合