- 浏览: 351874 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (160)
- webservice (2)
- 数据库开发 (9)
- LINUX (6)
- 团队协作 (5)
- 前端技术 (4)
- J2EE (31)
- web服务器 (9)
- 经验常识 (12)
- 开发工具 (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 1057日志级别 级别顺序(低到高): DEBUG < INFO ... -
java集合排序
2013-09-24 19:18 1114java对象集合排序在开发中使用非常广泛,需要重点理解,而它实 ... -
关于java.lang.OutOfMemoryError的参数配置误区
2013-09-10 15:10 1121这两天在本机用eclipse的jetty插件跑项目,老是抛出一 ... -
spring这样的来配置一些常量很方便
2013-09-03 09:48 2493<util:list id="haidilao ... -
快速查找线程死锁(展苍)
2012-12-23 13:25 0Thread dump Thread dump是比较容易查找 ... -
javap查看虚拟机为你做了什么
2012-12-02 15:38 556public class Test { publi ... -
javaweb开发乱码问题整理
2012-03-15 14:01 995j2ee方面的开发总会遇到各种各样的乱码问题,总想抽空整理一下 ... -
用正则表达式扣出字符串中指定的多处内容
2011-12-26 15:29 1448截取打印出所有<record></recor ... -
java反射机制学习
2011-11-19 13:01 1036反射基本概念: 在java ... -
java匿名内部类使用场景列举
2011-11-18 10:57 2608java内部类是怎么一回事?匿名内部类何时会用到,之前一直很模 ... -
使用UUID生成32位ID
2011-11-14 11:11 21320UUID(Universally Unique Identif ... -
java数据类型介绍
2011-11-09 14:34 952java数据类型介绍 简单类型大小范围/精度 ... -
Exception点滴
2011-11-08 14:24 943java.lang.reflect.UndeclaredThr ... -
将set集合转为list并对对象进行排序
2011-11-06 15:09 7736之前用hibernate的时候,遇到一对多的表结构。比如班级( ... -
src地址为空导致两次进入到action请求地址
2011-10-29 13:05 1526今天用struts开发一个页面,奇怪的是我点了一次提交,达到目 ... -
struts标签与ognl表达式用法点滴
2011-10-27 18:43 1401struts标签的使用中,会涉及一些比较细的点儿,汇总一下,以 ... -
struts2第四回:工作流程解析
2011-10-14 15:18 872这两天没什么任务,就想研究一下struts2的源码,看了半天, ... -
struts2第三回:自定以拦截器
2011-10-13 19:14 1093实现一个拦截器并调用。 ============下面是Logi ... -
struts2第二回:防止重复提交
2011-10-13 18:51 2261基本原理:用户访问做了重复提交的页面,服务器会生成一个令牌,这 ... -
include与jsp:include与s:action与s:include与iframe用法汇总
2011-10-13 13:47 207101.<%@ include file="../ ...
相关推荐
Struts的验证框架Validate是Java Web开发中一个关键的组件,尤其在构建MVC(Model-View-Controller)架构的应用程序时。这个框架主要用于确保用户输入的数据满足预定义的业务规则,从而提升应用的安全性和数据的准确...
- 第一代Struts(Struts 1)采用MVC设计模式,将业务逻辑与视图分离,极大地简化了Web应用的开发过程。 - 随着Web应用需求的不断增长和技术的发展,第一代Struts逐渐显露出一些不足之处,如强耦合性等。 - 为了...
Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着显著的区别。以下是关于这两个框架在关键特性上的对比: 1. **Action类**: - **Struts1**:要求Action类继承...
Struts是Java Web开发中的一款经典MVC框架,它的验证框架Validate是用于处理用户输入验证的重要组件。在Struts的第六讲中,我们主要探讨了如何有效地利用Validate进行数据校验,以确保用户提交的信息符合应用程序的...
为了解决这一问题,社区开发了第三方工具如Struts TestCase,它提供了一套用于模拟Struts1环境的组件。 - **Struts2**: 在Struts2中,可以通过初始化、设置属性和调用方法等方式轻松地测试Action。依赖注入的支持...
- **Struts 2**:使用更强大的OGNL(Object Graph Notation Language)表达式语言,支持复杂的数据结构操作,如遍历集合、获取嵌套属性等,大大提高了数据访问的灵活性和便利性。 #### 7. 绑定值到视图的对比 - **...
- **Struts1**:使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器不可配置。 - **Struts2**:使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换,并且具有更高的灵活性。 #### 九、数据...
在Struts中,验证框架Validate是实现业务数据验证的重要工具,它帮助开发者确保用户输入的数据符合预设的规则,从而提高应用的安全性和用户体验。 在Struts的验证框架中,验证过程通常分为两部分:客户端验证和...
Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着显著的区别。以下是关于这两个框架差异的详细解释: 1. **Action类**: - **Struts1**:要求Action类继承自一...
Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着不同的实现方式。以下是对这两个框架的详细比较: 1. **Action类** - **Struts1**:在Struts1中,Action类...
Struts是基于MVC设计模式的开源Web应用框架,主要分为Struts1和Struts2。Struts1使用JSP和Servlet,它通过web.xml和struts-config.xml配置文件来管理和调度请求。请求从客户端浏览器出发,被ActionServlet接收,接着...
1. **通过ActionContext**:使用`ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE)`。 2. **通过ServletActionContext**:直接使用`ServletActionContext.getResponse()`。 3. **通过拦截器**:...
在探讨Struts2与Struts1的区别时,我们需深入理解这两个框架的设计理念、架构模式以及它们在实际应用中的表现差异。以下将从多个角度详细分析这两种流行Java Web框架的不同之处。 ### 1. **Action类的区别** #### ...
struts2学习教程包括:第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传...
Struts1和Struts2是两个非常著名的Java Web框架,它们在设计模式、可测试性、输入处理和表现层等方面存在显著的区别。 首先,Action类的设计有所不同。在Struts1中,Action类需要继承一个抽象基类,这限制了Action...
Struts1和Struts2是两个非常著名的Java Web开发框架,它们都在MVC(Model-View-Controller)设计模式的基础上提供了强大的功能。然而,两者在设计和实现上有显著的差异,下面将详细阐述它们的区别。 1. **Action类...
5. **编写第一个示例程序:** - 在`struts.xml`文件中添加如下配置: ```xml <struts> <constant name="struts.devMode" value="true"/> <package name="default" namespace="/" extends="struts-default"> ...
Struts2是一个流行的Java Web框架,它在Struts1的基础上进行了很多改进,提供了更多的灵活性和可测试性。本文将深入探讨Struts2的一些关键新特性。 1. **Action类的改变**: 在Struts1中,Action类需要继承自一个...