Struts2教學
Struts2快速入門
Struts2 MVC架構
Struts2 是什麼?
Struts2 環境配置
Struts2 體系結構
Struts2 Hello World 實例
Struts2 配置文件
Struts2 Action/動作
Struts2 攔截器
Struts2 結果和結果類型
Struts2 值棧/OGNL
Struts2 文件上傳
Struts2 MySQL數據庫訪問
Struts2 發送郵件Email
Struts2 驗證框架
Struts2 基於XML校驗
Struts2 本地化/國際化(i18n)
Struts2 類型轉換
Struts2 主題和模板
Struts2 異常處理
Struts2 註釋
Struts2 註釋類型
Struts2 控件標籤
Struts2 iterator標籤
Struts2 if/else標籤
Struts2 merge標籤
Struts2 append標籤
Struts2 generator標籤
Struts2 數據標籤
Struts2 action標籤
Struts2 include標籤
Struts2 bean 標籤
Struts2 date 標籤
Struts2 param 標籤
Struts2 property 標籤
Struts2 set 標籤
Struts2 text 標籤
Struts2 url標籤
Struts2 表單標籤
Struts2 Ajax 標籤
Struts2和Spring集成
Struts2和Tiles集成
Struts2和Hibernate集成
Struts 2 hello world (XML版本)
Struts2註解示例
Struts2 @ResultPath註釋示例
Struts2 include(包含)多個配置文件
Struts2命名空間配置和解釋
Struts2開發者模式
如何刪除Struts2動作的後綴擴展名
使用Struts2動作
Struts2的ActionError&ActionMessage示例
Struts2模型驅動實例
Struts2映射攔截動作
Struts2重寫攔截器參數
Struts2攔截器棧的例子
Struts2 execAndWait攔截器例子
Struts2 <s:textfield>文本示例
Struts2 <s:password>密碼示例
Struts2 <s:hidden>隱藏值例子
Struts2 <s:textarea>文本域實例
Struts2 <s:radio>單選按鈕例子
Struts2單選預選按鈕值
Struts2 <s:checkbox>複選框例子
Struts2設置多個複選框缺省值
Struts2 <s:checkboxlist>多個複選框例子
Struts2 <s:select>下拉框例子
Struts2自動選擇下拉框的值
Struts2 <s:combobox>組合框的例子
Struts2 <s:head>示例
Struts2文件上傳例子
Struts2上傳多個文件例子
Struts2 <s:doubleselect>示例
Struts2 <s:updownselect>示例
Struts2 <s:optiontransferselect>示例
Struts2 <sx:datetimepicker>示例
Struts2 <sx:autocompleter>自動提示例子
Struts2 autocompleter+JSON例子
Struts2 <s:iterator>迭代器標籤示例
Struts2 if,elseif,else標籤示例
struts2 <s:append>標籤示例
Struts2 <s:generator>標籤示例
Struts2 <s:merge>標籤示例
Struts2 <s:sort>標籤示例
Struts2 <s:subset>標籤示例
Struts2 <s:a>標籤示例
Struts2 <s:action>標籤示例
Struts2 <s:bean>標籤示例
Struts2 <s:date>標籤示例
Struts2 <s:debug>標籤示例
Struts2 <s:include>標籤示例
Struts2 <s:i18n>標籤示例
Struts2 <s:param>標籤示例
Struts2 <s:property>標籤實例
Struts2 <s:push>標籤示例
Struts2 <s:set>標籤示例
Struts2 <s:texttag>標籤示例
Struts2 <s:url>標籤示例
Struts2資源包使用示例
Struts2本地化和國際化
Struts2 key鍵屬性示例
Struts2中文本地化問題
如何配置Struts2全局資源包
Struts2+Spring集成實例
Struts2+Quartz2調度集成實例
Struts2+Hibernate使用Full Hibernate Plugin集成
Struts2+Hibernate集成實例
Struts2+Spring+Hibernate集成實例
Struts2+Log4j集成
Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter有什麼不同?
Struts2獲取HttpServletRequest實例
Struts2獲取HttpServletResponse實例
如何獲取ServletContext對象
Struts2配置Action類的靜態參數
Struts2下載文件實例
Struts2和JSON實例

Struts2 Action/動作

動作是Struts2框架的核心,因爲他們的任何MVC(模型 - 視圖 - 控制器)框架。每個URL將被映射到一個特定的動作,它提供了來自用戶的請求提供服務所需的處理邏輯。

但動作也提供其他兩個重要的能力。首先,操作從請求數據的傳輸中起着重要的作用,通過向視圖,無論是一個JSP或其它類型的結果。二,動作必須協助的框架,在確定結果應該渲染視圖,在響應該請求將被退回。

創建動作:

在Struts2的動作,唯一的要求是必須有一個無參數的方法返回String或結果的對象,必須是一個POJO。如果不帶參數的方法是不指定,則默認動作是使用execute()方法。

也可以選擇擴展ActionSupport類實現了6個接口,包括動作界面。動作界面如下:

public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public String execute() throws Exception; }

讓我們來看看Hello World示例的操作方法:

package com.yiibai.struts2; public class HelloWorldAction{ private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

爲了說明這一點,操作方法控制視圖,讓我們做出以下更改執行方法和擴展類ActionSupport 如下:

package com.yiibai.struts2; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport{ private String name; public String execute() throws Exception { if ("SECRET".equals(name)) { return SUCCESS; }else{ return ERROR; } } public String getName() { return name; } public void setName(String name) { this.name = name; } }

在這個例子中,我們有一些在execute方法的邏輯來看待的name屬性。如果屬性等於字符串「SECRET」,我們返回SUCCESS 的結果,否則我們返回ERROR 的結果。因爲我們已經擴展ActionSupport,所以我們可以使用字符串常量的成功和錯誤。現在,讓我們修改我們的struts.xml文件如下:

<constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="hello" class="com.yiibai.struts2.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp <result name="error">/AccessDenied.jsp

創建視圖

讓我們創建以下JSP文件 helloWorld.jsp 的WebContent文件夾在eclipse項目。要做到這一點,右鍵單擊WebContent文件夾在項目資源管理器,選擇New >JSP File。該文件將要求返回的結果是SUCCESS,這是一個字符串常量「success」的定義在動作界面:

<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> Hello World Hello World, <s:property value="name"/>

以下是由框架的動作的結果將被調用的文件,該文件是等於字符串常量「錯誤」的ERROR 。以下是AccessDenied.jsp 的內容

<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> Access Denied You are not authorized to view this page.

我們還需要在WebContent文件夾中創建index.jsp。該文件將作爲初始動作URL,用戶可以直接點擊告訴Struts 2框架調用HelloWorldAction類的 execute方法,並呈現 helloWorld.jsp視圖。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> Hello World

Hello World From Struts2

<form action="hello"> <label for="name">Please enter your name
<input type="text" name="name"/> <input type="submit" value="Say Hello"/>

就是這樣,不需要改變的web.xml文件,所以讓我們用同一個web.xml,是之前我們已經創建了範例章。現在,我們已經準備好運行使用Struts 2框架的 Hello World應用程序。

執行應用程序

右鍵點擊項目名稱,並單擊 Export > WAR File 創建一個WAR文件。然後在Tomcat 的webapps目錄下部署這個WAR。最後,啓動Tomcat服務器和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp。這會給出以下畫面:

Hello

讓我們爲「SECRET」,並輸入一個字,應該看到以下頁面:

Success

現在輸入任何單詞而非「SECRET」,應該看到以下頁面: 

Access

建立多個動作:

經常會定義一個以上的動作,以處理不同的請求,並提供不同的用戶的URL,因此可以定義不同的類定義如下:

package com.yiibai.struts2; import com.opensymphony.xwork2.ActionSupport; class MyAction extends ActionSupport{ public static String GOOD = SUCCESS; public static String BAD = ERROR; } public class HelloWorld extends ActionSupport{ ... public String execute() { if ("SECRET".equals(name)) return MyAction.GOOD; return MyAction.BAD; } ... } public class SomeOtherClass extends ActionSupport{ ... public String execute() { return MyAction.GOOD; } ... }

在struts.xml文件中配置這些操作如下:

struts> <constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="hello" class="com.yiibai.struts2.HelloWorld" method="execute"> <result name="success">/HelloWorld.jsp <result name="error">/AccessDenied.jsp <action name="something" class="com.yiibai.struts2.SomeOtherClass" method="execute"> <result name="success">/Something.jsp <result name="error">/AccessDenied.jsp

正如看到在上述假設的例子,動作的結果是重複的SUCCESS和ERROR。要解決這個問題,建議創建一個類包含結果的結果。