struts 中繼承ActionSupport類

來源:互聯網
上載者:User

理論上Struts 2.0的Action無須實現任何介面或繼承任何類型,但是,我們為了方便實現Action,大多數情況下都會繼承com.opensymphony.xwork2.ActionSupport類,並重載(Override)此類裡的String execute()方法。

由JavaDoc可知,ActionSupport類實現了介面。

com.opensymphony.xwork2.Action。

com.opensymphony.xwork2.LoaleProvider。

com.opensymphony.xwork2.TextProvider。

com.opensymphony.xwork2.Validateable。

com.opensymphony.xwork2.ValidationAware。

com.uwyn.rife.continuations.ContinuableObject。

java.io.Searializable。

java.lang.Cloneable。

例如下例所示:

 
  1. public class HelloWorld extends ActionSupport {
  2. private String message;
  3. public String getMessage() {
  4. return message;
  5. }
  6. public String execute() {
  7. message = " Hello World, Now is " +
  8. DateFormat.getInstance().format( new Date());
  9. return SUCCESS;
  10. }
  11. }

然後可以配置如下映射:

 
  1. <package name ="ActionDemo" extends ="struts-default">
  2. <action name ="HelloWorld" class ="tutorial.HelloWorld">
  3. <result> /HelloWorld.jsp</result>
  4. </action>
  5. </package>

在預設情況下,當請求HelloWorld.do發生時,Struts 2會根據struts.xml裡的Action映射集(Mapping)執行個體化tutoiral.HelloWorld類,並調用其execute()方法。當然,我們可以通過以下兩種方法改變這種預設調用,這個功能(Feature)有點類似Struts 1中的LookupDispathAction。

在sturts.xml中建立Action,並指明其調用的方法。

訪問Action時,在Action名後加上"!xxx"(xxx為方法名)。

例如我們可以在tutorial/HelloWorld.java中加入以下方法:

 
  1. public String aliasAction() {
  2. message ="自訂Action調用方法";
  3. return SUCCESS;
  4. }

然後可以在sturts.xml中指定method來佈建要求的函數名:

 
  1. <action name="AliasHelloWorld" class="
  2. tutorial.HelloWorld" method="aliasAction">
  3. <result>/HelloWorld.jsp</result>
  4. </action>

也可以直接在URL地址欄中使用"!method"來佈建要求的函數名:

 
  1. http://localhost:8080/Struts 2Test
  2. /HelloWorld!aliasAction.action

通過上面的兩個例子,細心的朋友應該可能會發現classes/tutorial/HelloWorld.java中Action方法(execute和aliasAction)返回的都是SUCCESS。這個屬性變數筆者並沒有定義,所以大家應該會猜到它在ActionSupport或其父類中定義。沒錯,SUCCESS在介面com.opensymphony.xwork2.Action中定義,另外同時定義的還有ERROR、INPUT、LOGIN、NONE。

此外,筆者在配置Action時都沒有為result定義名字(name),所以它們預設都為SUCCESS。值得一提的是,Struts 2.0中的result不僅僅是Struts 1.x中Forward的別名,它可以實現除Forward外的很激動人心的功能,如將Action輸出到FreeMaker模板、Velocity模板、JasperReports和使用XSL轉換等。這些都過result裡的type(類型)屬性(Attribute)定義的。另外,你還可以自訂result類型。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.