2012-03-30 22 views
1

我有一個關於在Struts2中返回數據的問題。 在我的Action類中,如下所示,我正在獲取記錄並在ArrayList中設置它們。如何返回一個ArrayList作爲Struts2的Action類的執行方法?

但是有沒有人可以告訴我,我該如何將獲得的ArrayList返回到JSP頁面?因爲使用Action類execute方法的語法,它允許我們只返回一個String?

public class DBDisplay extends ActionSupport{ 
private String name ; 
List list = null; 

public String execute() throws Exception 
{ 
list = DBClass.getInstance().list(); 
Iterator it = list.iterator(); 
while(it.hasNext()) 
{ 
name = (String) it.next(); 
} 
setName(name); 
} 
public String getname() 
{ 
return name; 
} 
public void setName(String name) 
{ 
this.name = name; 
} 

} 

回答

-1

一個Struts 2框架的基本設計目標是把MVC(模型 - 視圖 - 控制器)設計模式到Web應用程序的開發。 MVC模式使關注點分離,並且允許易於維護的乾淨鬆散耦合的代碼。 MVC模式由3個不同的部分組成。模型,視圖和控制器。讓我們看看這三個元素是如何在Struts 2中實現的。 控制器(StrutsPrepareAndExecuteFilter) - 控制器是處理各種請求協調的組件。在Web應用程序中,不同的用戶請求需要由不同的應用程序組件提供,並由Controller組件進行此決定。在Struts 2中,對Web應用程序的每個請求都首先到達前端控制器類 - StrutsPrepareAndExecuteFilter。這將檢查傳入的請求,然後將請求路由到配置爲處理請求的相應類(在Struts中稱爲Action類)。

模型(動作) - 模型是負責執行應用程序業務功能的組件。它是應用程序的核心。它代表應用程序的狀態,幷包含業務邏輯和業務數據。在Struts 2中,動作類充當應用程序模型的入口。這些類負責處理每個用戶請求,然後將業務邏輯委託給由應用程序開發人員編寫的其他類。 針對不同的用戶請求擁有不同的操作類別,可確保我們擁有乾淨的代碼,可以輕鬆維護。但是,不同的用戶請求(如應用程序日誌記錄)所需的功能呢?對於這樣的橫切問題,Struts 2有一個稱爲攔截器的不同組件。

查看(結果) - 在MVC架構中查看是負責演示(用戶界面)的組件。 View組件使用Model組件來獲取數據並顯示它。 Struts 2支持多種技術,例如JSP,Velocity模板,FreeMarker,用於View組件的XSLT。在Struts 2術語中,View被視爲結果。動作類(Model)確定應該向用戶呈現什麼Result(View)。

用戶通過訪問瀏覽器中的應用程序URL來訪問Struts 2應用程序的功能。請求總是來自StrutsPrepareAndExecuteFilter控制器(因爲它是在所有Struts 2應用程序的web.xml中配置的)。 StrutsPrepareAndExecuteFilter查找Action類以在struts.xml文件中調用。或者,它可以使用慣例來猜測它。然後調用Action類的execute()方法,然後調用業務邏輯類。 動作類可以指定要使用註釋顯示的視圖,也可以在struts.xml文件中指定它。無論哪種方式,Struts 2都知道要調用哪個View(Result)來顯示數據給用戶。這裏需要注意的另一件重要事情是,Action類中的對象可用於View組件。因此,操作不僅決定顯示哪個視圖(結果),而且還提供視圖所需的數據。

valueStack(它是objectStack和contextMap的組合)OGNL用於存儲動作和其他對象。您可以使用OGNL來訪問對象堆棧和上下文映射。

OGNL

綁定元件到模態的目的和從一種類型轉換值與模態對象另一個 綁定通用代碼。 動態創建列表和地圖,與GUI方法一起使用 調用方法。你可以調用任何方法,而不僅僅是getter和setter。

+0

下來選民請讓我知道這裏有什麼問題,以便我可以做出適當的修改。 – 2012-08-15 00:03:15

+0

我假設,因爲(一)它不回答這個問題,(二)需要很多的話纔不回答。然而,一年之後,我終於明白了這個問題,因爲我隨即獲得了一個贊成票。 – 2013-11-09 12:44:02

2

動作類返回一個字符串來命名結果,而不是返回數據。數據通過任一操作屬性(例如您已經公開的name)或模型實例(如果實施ModelDriven)公開。

訪問list相同name –通過提供公共的訪問到列表:

public class DBDisplay extends ActionSupport { 
    private List list; 
    public List getList() { return list; } 
    // Rest of class elided. 
} 
從JSP

然後,例如:

<s:iterator value="list"> 
    <s:property /><br/> 
</s:iterator> 

迭代器標籤"value"屬性指的是list動作屬性,並且會在動作上調用getList()。如果沒有"value"屬性,屬性標籤將訪問堆棧頂部的值。

你不妨花一些時間看看Struts 2 "nutshell" documentation

相關問題