1. 程式人生 > >關於如何自定義Struts2表單驗證後的錯誤資訊顯示格式【基於宣告式驗證】

關於如何自定義Struts2表單驗證後的錯誤資訊顯示格式【基於宣告式驗證】

網上關於很多通過修改template主題為simple達到最後的效果,但是多數是直接通過硬編碼的方式去驗證【即程式設計式驗證】,這裡就自己是怎麼通過宣告式驗證去達到格式優化的效果的,可能程式碼比較low,希望大家見諒。

首先是動作類以及登陸的jsp頁面:【StudentAction.java】【login.jsp】

public class StudentAction extends ActionSupport implements ModelDriven<Student> {
	private Student student = new Student(); 

	@Override
	public Student getModel() {
		return student;
	}
	
	public String loginStu() {
		return "success";
	}

}

這裡還必須改主題,兩種方式,一種通過struts.xml修改,這裡採用另一種直接在<s:form>上面新增theme屬性即可 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!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="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<s:form action="action3.action" theme="simple">
		使用者名稱:<s:textfield name="username" label="使用者名稱" />
		<span style="color:red"><s:fielderror>
			<s:param>username</s:param>
		</s:fielderror>
		</span>
		<br />
		年齡:<s:textfield name="age" label="年齡" />
		<span style="color:red"><s:fielderror>
			<s:param>age</s:param>
		</s:fielderror>
		</span>
		<br />
		郵箱:<s:textfield name="email" label="郵箱" />
		<span style="color:red"><s:fielderror>
			<s:param>email</s:param>
		</s:fielderror>
		</span>
		<br />
		密碼:<s:textfield name="password" label="密碼" />
		<span style="color:red"><s:fielderror>
			<s:param>password</s:param>
		</s:fielderror>
		</span>
		<br />
		確認密碼:<s:textfield name="repassword" label="確認密碼" />
		<span style="color:red"><s:actionerror /></span>
		<br />
		成績:<s:textfield name="score" label="成績" />
		<span style="color:red"><s:fielderror>
			<s:param>score</s:param>
		</s:fielderror>
		</span>
		<br />
		個人主頁:<s:textfield name="url" label="個人主頁" />
		<span style="color:red"><s:fielderror>
			<s:param>url</s:param>
		</s:fielderror>
		</span>
		<br />
		性別:<s:radio list="{'男','女'}" name="gender" label="性別" />
		<span style="color:red"><s:fielderror>
			<s:param>gender</s:param>
		</s:fielderror>
		</span>
		<br />
		<s:submit value="提交" />
	</s:form>
</body>
</html>

上圖只是為了達到效果,可能還有更簡便的方式,但是我這裡就不試驗了,對了,說一下之所以加上<span>標籤是因為我在

<s:fielderror>這個標籤中新增cssStyle不起作用。

接下來是宣告式驗證的xml檔案程式碼:【StudentAction-action3-validation.xml】這個檔案一定要放在和動作類一個路徑下面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
	<field name="username">
		<field-validator type="requiredstring">
			<message>請輸入使用者名稱</message>
		</field-validator>
	</field>

	<field name="age">
		<field-validator type="int">
			<param name="min">18</param>
			<param name="max">100</param>
			<message>請輸入18-100之間的整數</message>
		</field-validator>
	</field>

	<field name="email">
		<field-validator type="email">
			<message>請輸入正確的郵箱格式</message>
		</field-validator>
	</field>

	<field name="password">
		<field-validator type="requiredstring">
			<!-- 注入取消使用trim -->
			<param name="trim">false</param>
			<message>請輸入密碼</message>
		</field-validator>
		<field-validator type="stringlength">
			<param name="minLength">3</param>
			<param name="maxLength">8</param>
			<message>密碼長度是3~8位的</message>
		</field-validator>
	</field>

	<!-- 確認密碼和密碼必須保持一致,是2個欄位的事,所以要使用基於驗證器的宣告方式 -->
	<validator type="expression">
		<param name="expression">
			<![CDATA[
				password == repassword
			]]>
		</param>
		<message>兩次密碼必須一致</message>
	</validator>

	<field name="score">
		<field-validator type="regex">
			<param name="regex">
				\d+
			</param>
			<message>請輸出正確的成績</message>
		</field-validator>
	</field>

	<field name="url">
		<field-validator type="url">
			<message>請輸入正確的url地址</message>
		</field-validator>
	</field>

	<field name="gender">
		<!-- required是一個只驗證是否null的內建驗證器,不會去除空格 -->
		<field-validator type="required">
			<message>請選擇性別</message>
		</field-validator>
	</field>
</validators>

 這裡只是為了實現效果,有些驗證還需要完善,比如成績校驗等等。

接下來就是去struts2核心包拷貝這兩個檔案,然後建立template/simple目錄,放在這裡面

最後就是修改這兩個檔案內容,很簡單刪除裡面的<ul>標籤和<li>標籤就行了:

【actionerror.ftl】刪除紅框裡面的內容

 

【fielderror.ftl】刪除紅框裡面的內容

最後部署服務啟動tomcat,得到最終的效果: