Struts2可以对客户端的输入进行校验,通过重写ActionSupport的validate方法来实现,具体如下:

首先通过用struts标签库创建一个form表单,表单中控件的name与action中的域名称相同,接着在validate方法中编写验证代码,若验证失败则会自动返回input。代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<s:actionerror/>
<s:form action="signIn">
<s:textfield label="UserName" name="username"></s:textfield>
<s:textfield label="PassWord" name="password"></s:textfield>
<s:textfield label="age" name="age"></s:textfield>
<s:submit>Sign in</s:submit>
</s:form>
</body>
</html>

form表单代码

package cn.net.bysoft.lesson4;

import com.opensymphony.xwork2.ActionSupport;

public class SignInAction extends ActionSupport {

    public String signIn() throws Exception {
return SUCCESS;
} public String signOut() throws Exception {
return SUCCESS;
} public void validateSignIn() {
if(username.equals("")){
addFieldError("username", "username invalid");
}
if(password.equals("")){
addFieldError("password", "password invalid");
}
if(age < 0 || age >= 150) {
addActionError("age error");
}
} public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String username;
private String password;
private int age;
private static final long serialVersionUID = 1100577442199735808L;
}

action类代码

在action中,可以将错误信息通过addFieldError方法进行保存,也可以通过addActionError方法保存。

此处有一细节,若在一个action中想编写多个验证方法,可以将执行方法首字母大写后与validate合并起来命名验证方法,如signIn()处理方法的验证方法为validateSignIn()。execute的验证方法为validateExecute()。

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant> <package name="struts2_3_24_1" extends="struts-default">
<action name="helloWorld" class="cn.net.bysoft.lesson1.HelloWorldAction">
<result>lesson1/hello.jsp</result>
</action>
<action name="login" class="cn.net.bysoft.lesson2.LoginAction">
<result name="success">/lesson2/success.jsp</result>
<result name="input">/lesson2/login.jsp</result>
</action>
<action name="point" class="cn.net.bysoft.lesson3.PointAction">
<result name="success">/lesson3/output.jsp</result>
<result name="input">/lesson3/index.jsp</result>
</action>
<action name="signIn" class="cn.net.bysoft.lesson4.SignInAction" method="signIn">
<result name="success">/lesson4/output.jsp</result>
<result name="input">/lesson4/index.jsp</result>
</action>
<action name="signOut" class="cn.net.bysoft.lesson4.SignInAction" method="signOut">
<result name="success">/lesson4/ok.jsp</result>
<result name="input">/lesson4/output.jsp</result>
</action>
</package>
</struts>

struts的配置文件代码

另外,类型转换错误的异常信息由struts定了,比如页面年龄输入一个a,但是age是int类型,则会引发类型转换异常Invalid field value for field "age".若角色这个提示不合适,可以自定义类型转换异常,有两种方式:

第一种是定义一个全局的属性文件,比如在src中定义一个message.properties,并在struts的配置文件中配置进入。<constant name="struts.custom.i18n.resources" value="message"></constant>

xwork.default.invalid.fieldvalue={0} convert error\!

{0}位置是我们的报错属性名称。

第二种是定义一个局部的属性文件,在创建action的包下创建一个同名的属性文件,比如在cn.net.bysoft.lesson4包下创建一个SignInAction.properties文件,不需要在struts配置文件中配置。

invalid.fieldvalue.age=\u5E74\u9F84\u7C7B\u578B\u8F6C\u6362\u9519\u8BEF

在属性文件中无法使用汉字,可以使用native2ascii工具把汉字转换成Unicode字符。
最终运行结果如下:

输入空的姓名和密码,并配输入超过200岁的年龄,可以看到姓名和密码的错误被放到了addFieldError中,而年龄的验证被放到了addActionError中。

在输入一个类型转换错误的年龄,可以看到类型转换错误被struts自动放到了addFieldError中,并且通过我们的属性文件替换成了中文的错误信息。

最后输入正确的信息则可以提交通过。

[Struts2学习笔记] -- 输入校验的更多相关文章

  1. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  2. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  3. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  4. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  5. 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验

    在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...

  6. struts2框架之输入校验(参考第二天学习笔记)

    输入校验: 1. 分类 客户端校验:javascript,它是用户体验而已,可以绕开. 服务器端校验 * 代码校验 1). 要求Action必须继承ActionSupport 2). 重写Action ...

  7. Struts2学习笔记(九)——数据校验

    Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注 ...

  8. Struts2学习笔记 国际化(Internationalization)

    概述 国际化(Internationalization),通途的讲,就是让软件实现对多种语言的支持.可以通过简单的设置就可以从一种语言切换到另一种语言.用的最多的地方就是在应用程序的界面表示上.我们经 ...

  9. [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...

随机推荐

  1. 【Android Studio】No JVM installation found

    如果没有配置好JDK的环境变量,启动Android Studio的时候会报错: 请参考我整理的博客文章<JDK的下载.安装和配置>,链接:http://www.cnblogs.com/du ...

  2. 继续畅通工程(kruskal prim)

    kruskal算法   #include <cstdio > #include <algorithm> using namespace std; const int MaxSi ...

  3. poj1026

    题目大意:暗号 Bod 和 Alice 计划使用一种全新的编码方案,令人惊讶的是这不是一个公开的公匙密码,但是他们的编码基于密匙,在Philadelphia on February 16th他们的会议 ...

  4. 安装Wamp后 Apache无法启动的解决方法

    安装Wamp后 Apache无法启动的解决方法,网上的解决方案可以说是五花八门,有些说了一大推,一点作用都起不到. 其实解决方法只需两步: 1.安装路径不能包含有中文,这个我不知道为什么,总之如果安装 ...

  5. Java内存管理以及各个内存区域详解

    一.概述 原文链接:http://blog.csdn.net/l271640625/article/details/39761439 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若 ...

  6. Centos 多个mysql数据库

    一.编译安装第一个MySQL 5.1.33 ? cd /opt   /usr/sbin/groupadd mysql   /usr/sbin/useradd -g mysql mysql -s /bi ...

  7. 关于node升级到7.0,无法gulp alljs的问题

    http://stackoverflow.com/questions/40308623/cannot-find-module-internal-fs-afer-upgrading-to-node-7 ...

  8. zookeeper选举代码分析

    本文将以zookeeper的3.4.6版本作为源码分析版本.主要的代码类包括QuorumPeerMain.QuorumPeer.FastLeaderElection.QuorumMaj等. 假设有a, ...

  9. (转)void指针(void *的用法)

    指针有两个属性:指向变量/对象的地址和长度 但是指针只存储地址,长度则取决于指针的类型 编译器根据指针的类型从指针指向的地址向后寻址 指针类型不同则寻址范围也不同,比如: int*从指定地址向后寻找4 ...

  10. Java 实现 SSH 协议的客户端登录认证方式--转载

    背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解.首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间 ...