在Struts 2.0中实现表单数据校验(Validation)

在写前几篇文章的时候,有些朋友建议我的写一篇关于表单数据校验的文章。 正如文章的开头所引用的《Writing Secure Code》的名言:“所有的输入都是罪恶的”,所以我们应该对所有的外部输入进行校验。而表单是应用程序最简单的入口,对其传进来的数据,我们必须进行校验。

转换与校验(Conversion & Validation)

其实上篇文章,我本来是打算写表单数据校验的内容,但是经过再三思考后,还是决定先写Struts 2.0转换器的内容。原因是我认为转换是校验的基础,只有在数据被正确地转换成其对应的类型后,我们才可以对其取值范围进行校验。看个例子相信大家可以更清楚。现在我们就来改造一下《转换器(Converter)——Struts 2.0中的魔术师》的第一个例子。

首先,从Action开始,修改后的代码如下:

package tutorial;
import java.util.Locale;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.LocalizedTextUtil;
public class HelloWorld extends ActionSupport {
   private String msg;
   private Locale loc = Locale.US;
   public String getMsg() {
     return msg;
   }
   public Locale getLoc() {
     return loc;
   }
   public void setLoc(Locale loc) {
     this .loc = loc;
   }
   @Override
   public void validate() {
     System.out.println( " Calling validate() " );
     if ( ! (loc.equals(Locale.US) || loc.equals(Locale.CHINA))) {
           addFieldError( " loc " , getText( " validation.loc " ));
     }
   }
   public void validateExecute() {
     System.out.println( " Calling validateExecute() by reflection " );
   }
   @Override
   public String execute() {
     System.out.println( " Calling execute() " );
     // LocalizedTextUtil是Struts 2.0中国际化的工具类,<s:text>标志就是通过调用它实现国际化的
       msg = LocalizedTextUtil.findDefaultText( " HelloWorld " , loc);
     return SUCCESS;
   }
}

时间: 2024-09-17 03:44:26

在Struts 2.0中实现表单数据校验(Validation)的相关文章

Java 中 Form表单数据的两种提交方式_java

1 GET - 从指定的服务器中获取数据 1.1 GET方法 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,例如:http://localhost:8080//customer/customer_info?res=json&mt=0&custId=1 1.2 特点 (1) GET请求能够被缓存 (2) GET请求会保存在浏览器的浏览记录中 (3) 以GET请求的URL能够保存为浏览器书签 (4) GET请求有长度限制(不能多于1024字节) (5) GET请

Struts 2.0中的转换器(Converter)

在我已往的Struts 1.x项目经验中,有个问题不时的出现--在创建FormBean时,对于某个属性到底应该用String还是其它类型? 开发Web应用程序与开发传统桌面应用程序不同,Web应用程序实际上是分布个不同的主机(当然也可以同一个主机,不过比较少见)上的两个进程之间互交.这种互交建立在HTTP之上,它们互相传递是都是字符串.换句话说, 服务器可以的接收到的来自用户的数据只能是字符串或字符数组,而在服务器上的对象中,这些数据往往有多种不同的类型,如日期(Date),整数(int),浮点

JavaWeb中获取表单数据及乱码问题的解决方法_java

首先使用一个用户提交界面作为举例(文本框,密码框,选择,下拉表单等),效果如下 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="t

在HTML5中提交表单数据以JSON编码格式传输

以JSON编码格式提交表单数据是HTML5对WEB发展进化的又一大贡献,以前我们的HTML表单数据是通过key-value方式传输的服务器端,这种形式的传输对数据组织缺乏管理,形式十分原始.而新出现的JSON格式提交表单数据方法,将表单里的所有数据转化的具有一定规范的JSON格式,然后传输的服务器端.服务器端接收到的数据是直接可以使用的合格JSON代码. 如何声明以JSON格式提交表单 大家应该对如何用表单上传一个文件的写法很熟悉,它需要在HTML中form标记上添加 enctype="mult

在Struts 2.0中国际化(i18n)您的应用程序

国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能. 其实,Struts 1.x在此部分已经做得相当不错了.它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可. 不过,所谓"没有最好,只有更

用struts读取hibernate中多表查询结果

问题描述 我有两个表,课程表Course和成绩表Score,然后通过hibernate跨表查询获取学号为sco的学生的选课信息,由于要同时获取课程信息所以要用到Course表然后将结果用struts将得到的结果显示,应该用什么标签啊logic:iterator能够完成吗?hql为:fromCoursec,Scoreswheres.cno=c.noands.sno=:sco:(其中sno为学号,cno为课程号) 解决方案 解决方案二:利用视图,通过leftjoin课程表,把你想要的数据取到一张表中

解决dedecms自定义表单数据校验不对的办法

般,我们不会用dedecms自带的表单在页面上操作,用的更多的是自定义表单,常用post方式来提交数据. 但是有时候我们自定义表单提交的时候常出现错误: 我们以下几点去检查程序文件: 1:/plus/diy.php 文件是否存在,是否对应. 2:: 1 <input name='sex' id='sex' type="text" /> name,id,type,是否和后台自定义表单对应. 3:value值是否和后台自定义表单一直,如果不一直,就复制前台预览中的代码. 4:

ActionForm类及表单数据验证

在Struts的中央控制器中写了Struts的控制器角色,在这篇介绍下Struts的视图! Struts的视图组件: Struts框架中的视图组件主要包括: JSP页面. ActionForm类. Struts自定义标记. 消息资源. 其中,ActionForm类是Struts框架的核心组件之一,是Struts的关键视图组件.在这篇文章中,将讨论ActionForm类及其作用.ActionForm的作用机理: ActionForm本质上是一种JavaBean,是专门用来传递表单数据的DTD(Da

在VS 2005和ASP.NET 2.0中处理CSS样式表

本文给读者一个所有基于母板页的网页自动获得样式表的技巧,就是由控件提供的对相对路径调整的支持.可以在母板页里使用这个东西来轻松地引用一个在整个项目里重用的.CSS 样式表文件,不管这个项目是相对于根目录的还是一个子应用. 推荐一个可在ASP.NET 2.0中利用的技巧是,当使用CSS时,使用母板页的功能给你的网站提供统一的UI,使用母板页在一个地方引用所有的样式表,这样,所有基于这个母板页的网页就会自动获得这些样式表. 可利用的一个技巧是由 <head runat="server"