`
whp0731
  • 浏览: 170382 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

struts2学习之六输入校验

阅读更多

一、输入校验与类型转化的关系

遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面

类型转换与输入校验的流程

1. 首先Struts2对客户端传来的数据进行类型转换

2. 类型转换完毕后再进行输入校验

3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)


注意:如果类型转换不成功,也同样要进行输入校验,这样一来某些字段会出来两个错误提示信息。(所以对某些字段可以不做输入校验,光做类型转换,如上例中
可注销掉

//  if(null == birthday)
//  {
//   this.addFieldError("birthday","birthday invalid");
//  }
//  if(null == graduation)
//  {
//   this.addFieldError("graduation","graduation invalid");
//  }

 

 

对于有些struts框架提供的错误信息,还是去不掉,可以使用struts的简单主题,即可以把某个字段设置为simple"的模式、也可以把表单也改成simple模式,见下文把表单也改成simple模式。

 

二、转换错误提示信息个性化
struts默认的转化信息报错往往不友好
我们可以通过以下方式处理
方式一,“转化信息报错”全局的属性文件
1、在strut.xml加上以下内容
<constant name="struts.custom.i18n.resources" value="message"></constant>


2、在src文件夹下加入以下文件message.properties
内容为xwork.default.invalid.fieldvalue={0} error
{0}表方哪个字段出错了,显示时自动地会用出错的字段填充。

 

方式二,“转化信息报错”局部的属性文件
位置:和相应的action在同一个包中
命名:action的名字.properties
例如:RegisterAction.properties文件

该文件内容为
invalid.fieldvalue.age=age convert error

 

若要把这个显示为中文,可以使用jdk的工具native2ascII.exe(该工具可以转换一行汉字或一个汉字文件成ascii吗)


三、对于输入输出页面改用struts标签库
1、register2.jsp  若采用的是默认模式的话,struts会自动生成表格

<body>
 <s:form action="register" >
  <s:textfield name="username" label="username" ></s:textfield>
  <s:password name="password" label="password" ></s:password>
  <s:repassword name="repassword" label="repassword" ></s:password>
  <s:textfield name="age" label="age"></s:textfield>
  <s:textfield name="birthday" label="birthday"></s:textfield>
  <s:textfield name="graduation" label="graduation"></s:textfield>
  <s:submit value=" submit "></s:submit>
 </s:form>
</body>

  

 

 

下面采用的是theme="simple"的模式:

 

<%@ taglib prefix="s" uri="/struts-tags"%>
...
	<body>
		<table align="center" width="40%">
			<tr>
				<td>

					<s:fielderror cssStyle="color:red" />

				</td>
			</tr>
		</table>


		<s:form action="register" theme="simple">

			<table align="center" width="40%" border="1">
				<tr>
					<td>
						username
					</td>
					<td>
						<s:textfield name="username" label="username" id="usernameId"></s:textfield>
					</td>
				</tr>

				<tr>
					<td>
						password
					</td>
					<td>
						<s:password name="password" label="password" id="passwordId"></s:password>
					</td>
				</tr>


				<tr>
					<td>
						re-password
					</td>

					<td>
						<s:password name="repassword" label="repassword" id="repasswordId"></s:password>
					</td>
				</tr>

				<tr>
					<td>
						age
					</td>

					<td>
						<s:textfield name="age" label="age"></s:textfield>
					</td>
				</tr>

				<tr>
					<td>
						birthday
					</td>

					<td>
						<s:textfield name="birthday" label="birthday"></s:textfield>
					</td>
				</tr>

				<tr>
					<td>
						graduation
					</td>

					<td>
						<s:textfield name="graduation" label="graduation"></s:textfield>
					</td>
				</tr>

				<tr>
					<td>
						<s:submit value=" submit "></s:submit>
					</td>

					<td>
						<s:reset value=" reset "></s:reset>
					</td>
				</tr>
			</table>
		</s:form>
	</body>

 

四、Error级别
filed级别的fieldError和action级别ActionError

可将将原来的addfieldError修改为addActionError  ,我们就开始使用ActionError级别了,例如:

      if (null == username || username.length() < 6 || username.length() > 10)
  {
   this.addActionError("username invalid");

  }

 

五、以上修改后,struts不会提示任何错误信息了
因为register2.jsp默认只会显示addfieldError级别的信息
 

六、如何显示ActionError级别的信息呢
很简单,在register2.jsp页面上加上以下信息即可了
<s:actionerror/>

注意:在第五步,即使不显示也通不过验证的,因为在整个验证中只要addfieldError和addActionError只要有一个不为空,就会验证通不过!

 

七、在sturts.xml配置文件中增加method属性,在RegisterAction增加相应method属性值的方法

<action name="register1" class="com.test.action.RegisterAction" method="test">
   <result name="success">/success.jsp</result>
   <result name="input">/register2.jsp</result>
</action>
<action name="regir2" class="com.test.action.RegisterAction" method="abc">
   <result name="success">/success.jsp</result>
   <result name="input">/register2.jsp</result>
</action>

 

 

	@Override
	public String execute() throws Exception
	{
		return SUCCESS;
	}
	
	public String test() throws Exception
	{
		return SUCCESS;
	}
	
	
	public String abc() throws Exception
	{
		System.out.println("abc method invoked");
		
		return SUCCESS;
	}
	
	public void validateAbc()
	{
		System.out.println("validateAbc() invoked");
	}
	

	@Override
	@SuppressWarnings("unchecked")
	public void validate()
	{
		System.out.println("validate~~~~~~~~~~~~~~~~~~~");		

		if (null == username || username.length() < 6 || username.length() > 10)
		{
			List list = new ArrayList();
			
			list.add(username);
			
			this.addActionError(this.getText("username.invalid",new String[]{username}));
		}

 

这样一来,以前在执行这个RegisterAction的时候,业务逻辑是只能放在excute()方法中的,现在也可以放在test方法中、abc()方法中了。提交register1表单时

可以用test方法。提交regi2表单时可以用类中的abc方法

 

那么这样一来,执行这些方法前,大家都用统一的一个很大的validate()方法来验证吗?显然这样是比较粗粒度的,不精细的
struts提出了方法相对应的validate()。如上面两个方法对应的validate()分别为:validateTest()和validateAbc()
如调用registerAction的test方法:执行过程将会如下的顺序validateTest()--》validate()--》test()
这样一来,谁都还是要去执行validate()验证,所以可以这样处理,再写一个validateExcute()对应Excute方法,然后在validate()中什么也不写,空方法。

分享到:
评论

相关推荐

    Struts2输入校验总结

    Struts2输入校验总结 Struts2输入校验

    Struts2学习教程之输入校验示例详解

    主要给大家介绍了关于Struts2学习教程之输入校验的相关资料,文中通过示例介绍的非常详细,对大家学习或者使用struts2具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    struts2学习笔记六(第6讲.Struts2的输入校验续一)

    NULL 博文链接:https://zhaolianyang.iteye.com/blog/867028

    STRUTS 2完全学习手册.pdf

    《Struts 2完全学习手册》全面讲述Struts 2开发框架的知识,包括Struts 2中配置文件的详细讲解、国际化与异常处理、数据类型的转换、数据的输入校验、Struts 2强大的标签库、Struts 2中文件的上传与下载、Struts 2对...

    struts2学习笔记三(第3讲.Struts2的类型转换)

    NULL 博文链接:https://zhaolianyang.iteye.com/blog/859890

    struts2学习笔记

    Struts2环境搭建 Struts2类型转换 Struts2输入校验 拦截器 文件的上传与下载 Struts2的国际化 深入探析 struts2与servlet API耦合方法

    struts2学习笔记五(第5讲.Struts2的输入校验)

    NULL 博文链接:https://zhaolianyang.iteye.com/blog/865509

    struts项目学习笔记

    更强大、更易用输入校验功能 整合Ajax支持:json插件 Struts2的今生前世: 1.早期开发模型Servlet+JSP+JavaBean显得力不从心: 流程凌乱、数据传递无序、缺乏辅助功能。 2.MVC模式的轻量级Web应

    struts2学习笔记!

    struts2学习笔记!因为还没有全部学完,所以分部分分享!主要内容:struts.xml配置,web.xml配置 Action要点!全局类型转换,部分类型转换,类型转换文件 类型装换错误的处理问题局部使用,把...struts2对数据转换与输入校验流程

    struts2学习ppt

    掌握Struts2原理、基本配置及...掌握Struts2核心解析、国际化、类型转换、输入校验、OGNL、Struts2标签库 了解AJAX技术支持 掌握文件的上传与下载。 深入理解MVC与Struts之间的关系,并使用基本MVC和Struts进行项目开发

    struts2笔记

    struts2学习笔记,详细说明了struts2框架的执行流程,类型转换,输入校验和国际化等等

    Struts框架

    struts2框架的输入校验与校验框架,这都是上课的总结笔记

    BBS-struts2课程设计-南工考研论坛

    (2) 用户处于只有登录之后才可以讨论,聊天;如果没有登录只可以查看信息。 (3) 用户注册,需要通过Struts2字段校验判断用户注册页面中的用户名、密码、年龄、出生日期、邮箱等是否符合校验规则,并对自定义校验器...

    struts2学习.rar

    介绍struts2的知识,分别是 入门与概述、action与struts xml、OGNL与类型转换、标签库、文件上传下载、拦截器、国际化、输入校验。

    Struts2.1学习笔记

    基于 Struts2.1.8 包括Struts2的基本应用、文件上传、拦截器、输入校验、国际化、OGNL表达式、Struts2标签等内容。

    struts原理与实践(六)

    本节介绍了采用Struts中的输入校验问题.. 很好的介绍struts的文章,自己就是一小节一小节学习的,每一小节都向目标迈进一步.所以将资源分了几个部分,这样大家学起来也比较有成就感.:)

    struts2的学习笔记+测试源代码

    手工编写代码实现对action中所有方法输入校验 博文链接:https://wuzhaohuixy-qq-com.iteye.com/blog/710102

    Strust2+spring+AJAX 项目

    本人系统学习Struts2过程中的全部例子(推荐给初学者,能够系统的掌握Struts2的全部特性) 简单的例子,国际化,拦截器,类型转换,输入校验,OGNL,标签库,文件上传与下载,整合Spring 开发环境:Myeclipse7.0

Global site tag (gtag.js) - Google Analytics