在struts2框架中實現手動處理輸入驗證

scalad發表於2015-05-11
    在struts2框架中實現手動處理輸入驗證,只需要在Action中對父類ActionSupport的validate方法重寫即可。就是講輸入驗證邏輯寫在validate方法中。下面看專案中的Action類checkUser.java
package action;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionSupport;

public class checkUser extends ActionSupport {
private static final long serialVersionUID = 1L;
private String user ;
private String sex;
private String pass;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public String execute() throws Exception {
return super.execute();
}
@Override
public void validate() {
if (getUser() == null || "".equals(getUser().trim())) {
this.addFieldError("user", "使用者名稱不能為空!");
} else {
Pattern p = Pattern.compile("\\w{6,20}");
Matcher m = p.matcher(getUser().trim());
if (!m.matches()) {
this.addFieldError("user", "使用者名稱由下劃線、字母、數字構成,長度為6-20");

}
if(getSex() == null || "".equals(getSex().trim())){
this.addFieldError("sex", "性別不能為空!");
}else if(getSex() != "男" || getSex() != "女"){
this.addFieldError("sex", "性別只能是男和女!");
}
if (getPass() == null || "".equals(getPass().trim())) {
this.addFieldError("pass", "密碼不能為空!");
} else {
int s = getPass().trim().length();
if (s<6 || s>30) {
this.addFieldError("pass", "密碼長度為應該在6-30之間!");

}
     }
}
這個Action類中多了一個validate方法,其作用是對檢視頁面傳過來的資料進行驗證,驗證規則則由自己編寫。addFUeldError
方法的作用是將錯誤的資訊儲存起來,只要有Fidld級別的錯誤資訊,struts2就跳轉到input檢視。程式中還用到了Pattern和
Matcher兩個類,這是java中用於處理正規表示式的類。下面是struts.xml配置檔案中的內容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="actionCheckUser" extends="struts-default">
<action name="check" class="action.checkUser">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>    


index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Struts2手動驗證</title>
  </head>
  <body>
    <s:fielderror></s:fielderror>
    <s:form action="check.action" theme="simple">
   使用者名稱:<s:textfield name="user" label=""></s:textfield><br/><br/>
   性別框:<s:textfield name="sex" label=""></s:textfield><br/><br/>
   密碼框:<s:password name="pass" label=""></s:password><br/><br/>
    <s:submit value="提交"></s:submit>
    </s:form>
  </body>

</html>


其中<s:fielderror></s:fielderror>標記用來顯示Action中addFieldError方法封裝的錯誤資訊,form標記中的theme='simple'
屬性的作用是表單使用struts2的簡易主題。





相關文章