Struts2的ActionError&ActionMessage範例


本教學顯示使用Struts2的 ActionError 和 ActionMessage 類。

1. ActionError – 是用來傳送錯誤資訊反饋給使用者 - 通過 <s:actionerror/> 來顯示。

<s:if test="hasActionErrors()">
   <div class="errors">
      <s:actionerror/>
   </div>
</s:if>

2. ActionMessage – 用於傳送資訊的反饋訊息給使用者,通過 <s:actionmessage/> 來顯示。

<s:if test="hasActionMessages()">
   <div class="welcome">
      <s:actionmessage/>
   </div>
</s:if> 

這裡有一個簡單的登入表單,如果使用者名不等於「tw511.com」將顯示錯誤訊息(actionerror),否則重定向到另一個頁面,顯示歡迎資訊(ActionMessage)。此外,所有的標籤和錯誤訊息檢索來自資源包(屬性檔案)。

1. 檔案夾結構

在MyEclipse中建立一個web工程,名稱為:struts2-errormsg,看這個專案結構,如下圖:

2. 屬性檔案

一共有兩個屬性檔案用來儲存資訊,其中 LoginAction.properties 檔案放在 com.yiibai.user.action 包下。

LoginAction.properties

#Welcome messages
welcome.hello = 你好
#error message
username.required = 使用者名不可以為空
password.required = 密碼不可以為空

global.properties

#Global messages
global.username = 使用者名
global.password = 密碼
global.submit = 提交
global.reset = 重置

3. 動作-Action

一個經典的動作類,做一個簡單的檢查,以確認使用者名是否等於「tw511.com",並使用 addActionError()設定錯誤資訊或addActionMessage()設定成功的訊息。

package com.yiibai.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

	private String username;
	private String password;
	 
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	//business logic
	public String execute() {

		return "SUCCESS";

	}

	//simple validation
	public void validate(){
		if("tw511.com".equals(getUsername())){
			addActionMessage("You are valid user!");
		}else{
			addActionError("I don't know you, dont try to hack me!");
		}
	}
}

4. JSP頁面檢視

兩個簡單的JSP頁面以及CSS樣式自定義錯誤訊息。

login.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Struts2 ActionError & ActionMessage 範例</title>
<style type="text/css">
.errors {
    background-color:#FFCCCC;
    border:1px solid #CC0000;
    width:400px;
    margin-bottom:8px;
}
.errors li{ 
    list-style: none; 
}
</style>
</head>
<body>
<h1>Struts2 ActionError & ActionMessage 範例</h1>
<s:if test="hasActionErrors()">
   <div class="errors">
      <s:actionerror/>
   </div>
</s:if>
<s:form action="validateUser">
    <s:textfield key="global.username" name="username"/>
    <s:password key="global.password" name="password"/>
    <s:submit key="global.submit" name="submit"/>
</s:form>
</body>
</html>

welcome.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Struts2 ActionError & ActionMessage 範例</title>
<style type="text/css">
.welcome {
    background-color: #DDFFDD;
    border: 1px solid #009900;
    width: 200px;
}
.welcome li {
    list-style: none;
}
</style>
</head>
<body>
    <h1>Struts 2 ActionError & ActionMessage範例</h1>
    <s:if test="hasActionMessages()">
        <div class="welcome">
            <s:actionmessage />
        </div>
    </s:if>
    <h4>
        <s:property value="getText('welcome.hello')" />
        <s:property value="username" />
    </h4>
</body>
</html>

5. 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="global" />

  <package name="user" namespace="/user" extends="struts-default">
     <action name="login">
	 <result>/pages/login.jsp</result>
     </action>
     <action name="validateUser" class="com.yiibai.user.action.LoginAction">
	 <result name="SUCCESS">/pages/welcome.jsp</result>
	 <result name="input">/pages/login.jsp</result>
     </action>
   </package>
	
</struts>
在Struts2,ActionError和ActionMessage功能和用法與Struts1非常相似。

6. 執行並測試

http://localhost:8080/struts2-errormsg/user/login.action


使用者名是無效的,顯示錯誤資訊:<s:actionerror/>

使用者名是有效的,顯示歡迎資訊:<s:actionmessage/>


原始碼下載 – Struts2-ActionError-ActionMessage.zip