Struts 2検証学習ノート(一)
最近Struts 2の入力チェックを勉強して、自分でまとめて、後で自分の学習チェックを振り返って、復習の準備をしているかもしれません.
入力チェックに対して、Struts 2は2つの方式を提供し、1:手書きコードで実現する;2:XML構成に基づく実装.
1:手書きコードで実現.
ActionSupportクラスを継承し、vlidateメソッドを書き換えてデータ検証を行います.あるデータ検証に失敗した場合、addFieldError()またはaddActionError()を呼び出してシステムのFieldErrorに情報を追加する必要があります.検証に失敗した場合、Struts 2はinputというresultという結果ページに自動的に転送されます.失敗情報はinputビューでというラベルで取得できます.これにより、検証が完了します.
index.jsp:ユーザー入力のインタフェースを提供する
success.jsp------------------------検査に成功した後、このページに移動してユーザーの情報を出力します.
ユーザーが入力したフィールドタイプが正しくないことを防止するために、例えば、年齢ユーザーがabcを入力したので、struts 2タイプの変換に失敗したときにユーザーにヒントを与えるファイルを構成します(struts 2タイプの変換は私が書いた学習ノートを見てください)
Validation.properties
struts.xml
Validation.java
以上は手動符号化の形式でデータ検証を行ったが,これにも欠点があり,我々は特有の方法を検証する必要がなく,他の方法を検証する必要がない場合がある.
また検証しなければなりません.どうすればいいですか.struts 2は私たちに良い解決策を提供してくれました.
メソッドを手動で書くこのメソッドの署名はvalidate()メソッドと同様です.たとえばabc()メソッドを検証する必要があります.----validateAbc()です.(注意:validate()メソッドは書かないが、execute()メソッドを検証する場合はvalidateExecut()と書きます.)
2:XMLで実現.
xml構成の実装では、xmlプロファイルをactionと同じパッケージに配置し、ルールActionName-validationを命名する必要があります.xml(これはAction全体を検証する)Actionの方法を検証する--』AcitonName-MthodName-validation.xml
Validation-validation.xml
入力チェックに対して、Struts 2は2つの方式を提供し、1:手書きコードで実現する;2:XML構成に基づく実装.
1:手書きコードで実現.
ActionSupportクラスを継承し、vlidateメソッドを書き換えてデータ検証を行います.あるデータ検証に失敗した場合、addFieldError()またはaddActionError()を呼び出してシステムのFieldErrorに情報を追加する必要があります.検証に失敗した場合、Struts 2はinputというresultという結果ページに自動的に転送されます.失敗情報はinputビューで
index.jsp:ユーザー入力のインタフェースを提供する
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@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%>">
<script type="text/javascript">
function validate(){
return true;
}
</script>
</head>
<body>
<!--validate="true" struts2 -->
<s:form method="post" action="validation" onsubmit="return validate();">
<s:textfield name="username" label=" " />
<s:password name="password" label=" " />
<s:password name="repassword" label=" " />
<s:textfield name="age" label=" " />
<s:textfield name="birth" label=" " />
<s:textfield name="graduation" label=" " />
<s:textfield name="phone" label=" " />
<s:textfield name="email" label=" " />
<s:submit></s:submit>
</s:form>
</body>
</html>
success.jsp------------------------検査に成功した後、このページに移動してユーザーの情報を出力します.
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
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 'register.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>
<form action="" method="post">
<table algin="center" width="60%" boder="1">
<tr>
<td>
:
</td>
<td>
${username }
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${password }
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${repassword }
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${age }
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${birth }
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${graduation}
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${phone}
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${email}
</td>
</tr>
<tr>
<td>
:
</td>
<td>
${url}
</td>
</tr>
</table>
</form>
</body>
</html>
ユーザーが入力したフィールドタイプが正しくないことを防止するために、例えば、年齢ユーザーがabcを入力したので、struts 2タイプの変換に失敗したときにユーザーにヒントを与えるファイルを構成します(struts 2タイプの変換は私が書いた学習ノートを見てください)
Validation.properties
invalid.fieldvalue.age = \u5E74\u9F84\u7C7B\u578B\u8F6C\u6362\u5931\u8D25
invalid.fieldvalue.birth = \u51FA\u751F\u65E5\u671F\u8F6C\u6362\u683C\u5F0F\u5931\u8D25
invalid.fieldvalue.graduation = \u6BD5\u4E1A\u65E5\u671F\u683C\u5F0F\u8F6C\u6362\u5931\u8D25
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="Validation"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="validation"
class="cn.validation.test.Validation">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
Validation.java
package cn.validation.test;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionSupport;
public class Validation extends ActionSupport {
//
private int age;
//
private Date birth;
//
private String email;
//
private Date graduation;
//
private String password;
//
private String phone;
//
private String repassword;
//
private String username;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getGraduation() {
return graduation;
}
public void setGraduation(Date graduation) {
this.graduation = graduation;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String execute() throws Exception {
System.out.println("execute");
return "success";
}
@Override
public void validate() {
System.out.println(" validate ");
if (null == username || username.length() < 6 || username.length() > 10) {
this.addFieldError("username", " 6 10 ");
}
if (null == password || password.length() < 6 || password.length() > 10) {
this.addFieldError("password", " 6 10 ");
}
else if (null == repassword || repassword.length() < 6
|| repassword.length() > 10) {
this.addFieldError("repassword", " 6 10 ");
}
else if (!password.equals(repassword)) {
this.addFieldError("password", " ");
}
if (age < 1 || age > 150) {
this.addFieldError("age", " 1 150 ");
}
if (null == birth) {
this.addFieldError("birth", " ");
}
if (null == graduation) {
this.addFieldError("graduation", " ");
}
if (null != graduation && null != birth) {
//
Calendar end = Calendar.getInstance();
end.setTime(graduation);
Calendar start = Calendar.getInstance();
start.setTime(birth);
if (!start.before(end)) {
this.addFieldError("birth", " ");
}
}
if (null == phone) {
this.addFieldError("phone", " ");
}
// 14..... 3G
if (!Pattern.compile("^1[3,4,5,8]\\d{9}$").matcher(phone).matches()) {
this.addFieldError("phone", " ");
}
if (null == email) {
this.addFieldError("email", " ");
}
if (!Pattern
.compile(
"^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$")
.matcher(email).matches()) {
this.addFieldError("email", " ");
}
}
}
以上は手動符号化の形式でデータ検証を行ったが,これにも欠点があり,我々は特有の方法を検証する必要がなく,他の方法を検証する必要がない場合がある.
また検証しなければなりません.どうすればいいですか.struts 2は私たちに良い解決策を提供してくれました.
メソッドを手動で書くこのメソッドの署名はvalidate()メソッドと同様です.たとえばabc()メソッドを検証する必要があります.----validateAbc()です.(注意:validate()メソッドは書かないが、execute()メソッドを検証する場合はvalidateExecut()と書きます.)
2:XMLで実現.
xml構成の実装では、xmlプロファイルをactionと同じパッケージに配置し、ルールActionName-validationを命名する必要があります.xml(これはAction全体を検証する)Actionの方法を検証する--』AcitonName-MthodName-validation.xml
Validation-validation.xml
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- name="View name" -->
<field name="username">
<!-- type short-circuit="true" -->
<field-validator type="requiredstring" short-circuit="true">
<message key=" " />
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message> ${minLength} ${maxLength} </message>
</field-validator>
</field>
<!--
<validator type="requiredstring" short-circuit="true">
<param name="fieldName">username</param>
<message key=" "></message>
</validator>
<validator type="stringlength">
<param name="fieldName">username</param>
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message> ${minLength} ${maxLength} </message>
</validator>
-->
<field name="password">
<field-validator type="requiredstring" short-circuit="true">
<message key=" " />
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message> ${minLength} ${maxLength} </message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="requiredstring" short-circuit="true">
<message key=" " />
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message> ${minLength} ${maxLength} </message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">repassword.equals(password)</param>
<message> </message>
</field-validator>
</field>
<field name="age">
<field-validator type="int" short-circuit="true">
<param name="max">150</param>
<param name="min">1</param>
<message> ${min} ${max} </message>
</field-validator>
</field>
<field name="birth">
<field-validator type="date" short-circuit="true">
<param name="max">2010-12-31</param>
<param name="min">1989-12-31</param>
<message> ${min} ${max} </message>
</field-validator>
<field-validator type="required">
<message key=" " />
</field-validator>
</field>
<field name="graduation">
<field-validator type="date" short-circuit="true">
<param name="max">2010-12-31</param>
<param name="min">1989-12-31</param>
<message> ${min} ${max} </message>
</field-validator>
<field-validator type="required">
<message key=" " />
</field-validator>
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(birth < graduation)]]></param>
<message> </message>
</field-validator>
</field>
<field name="email">
<field-validator type="stringlength" short-circuit="true">
<message key=" " />
</field-validator>
<field-validator type="email">
<message> </message>
</field-validator>
</field>
<field name="url">
<field-validator type="stringlength" short-circuit="true">
<message key=" " />
</field-validator>
<field-validator type="url">
<message> </message>
</field-validator>
</field>
<field name="phone">
<field-validator type="stringlength" short-circuit="true">
<message key=" " />
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[^1[3458]\d{9}$]]></param>
<message> </message>
</field-validator>
</field>
</validators>