1四敞、以前是在動(dòng)作類的excute業(yè)務(wù)方法里寫(xiě)校驗(yàn)代碼,這樣是不好的拔妥,校驗(yàn)代碼和業(yè)務(wù)邏輯代碼混合忿危,可讀性差,而且增加維護(hù)難度没龙。
2癌蚁、我們現(xiàn)在使用validate或validateXxx方法校驗(yàn)。就是在動(dòng)作類里重寫(xiě)ActionSupport類的validate()或放到自定義的validateXxx(),但是這樣當(dāng)字段較多的時(shí)候兜畸,也會(huì)很臃腫努释。
3、所以最好的辦法就是定義一個(gè)動(dòng)作類名-validation.xml或動(dòng)作類名-動(dòng)作名-validation.xml,并且保存在動(dòng)作類同一目錄下的xml校驗(yàn)配置文件咬摇。如動(dòng)作類名為BAction伐蒂,則該xml為BAction-validation.xml.
然后必須在xml校驗(yàn)配置文件中對(duì)每個(gè)校驗(yàn)字段配置校驗(yàn)器。
校驗(yàn)器的配置方法有兩種
字段型校驗(yàn)方式
非字段型方式
一般用第一種肛鹏,其中的key是引用國(guó)際化逸邦。
例子:
User.java
public class User {
private String name;
private String password1;
private String password2;
private int age;
private Date birthday;
private String email;
//get和set方法省略
}
注冊(cè)動(dòng)作類,注意一般要把pojo和動(dòng)作類分開(kāi)寫(xiě)在扰,
不要?jiǎng)幼黝惱镞€寫(xiě)上面那些字段缕减。但是表單提交是提交到動(dòng)作類的,也就是說(shuō)動(dòng)作類必須得有相同和字段取獲取表單提交的值芒珠。這時(shí)候我們用到ModelDriver桥狡,可以看看這個(gè)http://blog.csdn.net/li_tengfei/article/details/6098145
···
package com.ljs.struts.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class RegisterAction extends ActionSupport implements ModelDriven {
private User user = new User();
public Object getModel() {
// TODO Auto-generated method stub
return user;
}
public String register() throws Exception {
return SUCCESS;
}
}
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<link rel="stylesheet" type="text/css" href="<s:url value="/styles/styles.css"/>">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:form action="Register" namespace="/user">
<s:textfield name="name" label="用戶名"/>
<s:password name="password1" label="密碼"/>
<s:password name="password2" label="確認(rèn)密碼"/>
<s:textfield name="age" label="年齡"/>
<s:textfield name="birthday" label="生日"/>
<s:textfield name="email" label="email"/>
<s:submit value="提交" cssStyle="float:right"/>
</s:form>
</body>
</html>
style.css
設(shè)置label為斜體,出錯(cuò)就為紅色和斜體,錯(cuò)誤信息紅色和加粗
.label {font-style:italic; }
.errorLabel {font-style:italic; color:red; }
.errorMessage {font-weight:bold; color:red; }
RegisterAction-Register.xml
記住Register的R要大寫(xiě)裹芝,雖然方法是小寫(xiě)部逮,但是這里要大寫(xiě),沒(méi)有會(huì)出錯(cuò)嫂易。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message key="errors.name.requiredstring"/>
</field-validator>
<field-validator type="stringlength">
<param name="minlength">2</param>
<param name="maxlength">6</param>
<message key="errors.namelength"/>
</field-validator>
</field>
<field name="password1">
<field-validator type="requiredstring">
<message key="errors.password1.requiredstring"/>
</field-validator>
<field-validator type="regex">
<param name="regexExpression">
<![CDATA[(\w{4,15})]]>
</param>
<message key="errors.password"/>
</field-validator>
</field>
<field name="password2">
<field-validator type="fieldexpression">
<param name="expression">
<![CDATA[password1==password2]]>
</param>
<message key="errors.passwordequals"/>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message key="errors.age"/>
</field-validator>
</field>
<field name="birthday">
<field-validator type="required">
<message key="birthday.error.message"/>
</field-validator>
<field-validator type="date">
<param name="min">1990-01-01</param>
<param name="max">2017-01-01</param>
<message key="birthday.error.message"/>
</field-validator>
</field>
<field name="email">
<field-validator type="email">
<message key="errors.email"/>
</field-validator>
</field>
</validators>
RegisterAction.properties
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- Struts2配置文件的根元素 -->
<struts>
<package name="lab07" extends="struts-default" namespace="/user">
<action name="Register" class="com.ljs.struts.action.RegisterAction" method="register">
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>