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>
這裡有一個簡單的登錄表單,如果用戶名不等於“gitbook.net”將顯示錯誤消息(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
一個經典的動作類,做一個簡單的檢查,以確認用戶名是否等於“gitbook.net",並使用 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("gitbook.net".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