2011-10-11 68 views
0

到目前爲止,我一直使用JSP來顯示頁面。當一個頁面,如「添加項目」,我會加載所有項目類別中的數組列表並將其顯示在選擇框中選擇這樣的用戶請求:如何在JSF中填充數據

<select name="category> 
    <% 
     ArrayList<Category> categories = (ArrayList<Category>) request.getAttribute("categories"); 
     for (Category c : data) { 
    %> 
    <option value="<%= c.getId() %>"><%= c.getName() %></option> 
    <% 
     } 
    %> 
</select> 

從書「的JavaServer Faces 2.0,完整的參考資料「中,我瞭解到:」JSF通過不允許在標記頁面中包含Java代碼來強制實現乾淨的模型 - 視圖 - 控制器分離「。因此,如果有人能夠向我展示如何使用JSF處理上述任務,我將不勝感激,因爲我無法像以往一樣使用Java代碼。

最好的問候,

詹姆斯陳

回答

0

將要顯示的數據存儲在Java列表中,並將該列表作爲支持bean的屬性公開。使用適當的JSF標籤來顯示該屬性。

+0

我可以做前2分。你能告訴我需要使用哪種標籤嗎?謝謝! –

+0

感謝您的提示!我發現如何做到這一點。它是[這裏](http://www.roseindia.net/jsf/selectItems.shtml) –

+0

@JamesBoyZ:Roseindia.net是一個普遍教** **的網站。當您是JSF的新手時,請忽略此資源。 – BalusC

1

創建一個bean,並使其與已知的,例如@Named,以便您可以從JSF腳本中引用它。然後給這個bean一個返回你想要顯示的數據的方法,然後從你的JSF腳本中調用這個方法,在那個數據被預期的位置,例如一個循環結構。

+0

我是新的JSF。你能不能給我一個簡短的僞代碼如何做.xhtml頁面上的循環結構?目前,我只知道如何使用dataTable和outputText打印輸出。但是,我不知道如何把我需要的東西放入

2

JSF 2.0使用Facelets作爲模板方法,簡而言之,它是帶有一些附加元素的XHTML。

雖然技術上你可以從Facelets執行方法調用,但總的來說,這個想法是使用適當的geter/setter方法訪問JavaBean來執行數據移動。你可以做到這一點的代碼下面的片段顯示:

<h:selectOneMenu value="#{backingBean.selectedCategory}"> 
    <f:selectItems value="#{backingBean.categoryList}"/> 
</h:selectOneMenu> 

對事物的豆方,你想用或者面臨-配置(這在很大程度上是沮喪),或如一個機制來揭露一個bean JSF CDI或Managed Bean基礎架構。我強烈建議您考慮使用SEAM,因爲它將統一(當前非常不同的)Managed Bean和CDI框架,因此您可以在CDI中使用JSF範圍,並且可以在JSF範圍內使用CDI bean。

@ManagedBean(name="backingBean") 
@ViewScoped 
public class MyJavaBackingBean { 

    @ManagedProperty("#{param.categories}") 
    protected List<String> categoryList 

    public void setSelectedCategory(String value) { 
     this.selectedCategory = value; 
    } 
    public String getSelectedCategory() { 
     return this.property; 
    } 

    ... 

} 

您也可以使干將做你的價值觀的初始化工作(從例如數據庫中提取所屬分類),並使用一些其他JSF的註解做各種初始化任務。

您還可以編寫一些操作方法,它們返回表示JSF操作的字符串(將其編碼到您的faces-context.xml文件中)以在返回後執行。輔助bean上的階段偵聽器也可以在頁面渲染,驗證和提交的各個階段被調用,從而爲您提供非常細緻的控制。

categoryList在上面的例子中並不侷限於當然的基本類型,而< f:selectItems >也有一些語法來寫出你選擇的項目的文本版本,所以你可以製作一些相當複雜的表達式來顯示每個項目以友好的方式。

+0

=)謝謝你的非常詳細的答案。我不能完全理解你所有的觀點,因爲我是JSF的新手,但我會盡力記住這些事情:P。 –

+0

只要我2美分:馬上研究CDI。它本質上是一個Spring的J2EE標準化版本,功能非常強大。只要記得在使用CDI時使用SEAM(http://seamframework.org/Seam3),否則它不能很好地與JSF集成。使用它使得JSF非常高興地使用它,並且啓用了一些有趣的事情:http://stackoverflow.com/questions/6199458/how-to-create-a-modular-jsf-2-0-application – SplinterReality

0

在JSF 2.0中,您可以包含標籤h:selectOneMenu,您可以在其中獲取存儲選定項目值的值。 f:selectItems中的值可能是任何對象的集合,最多次在此對象中的SelectItem聲明值對象和要顯示的標籤。

<h:selectOneMenu value="#{backingBean.selectedvalue}"> 
    <f:selectItems value="#{backingBean.List}"/> </h:selectOneMenu> 

,如果你需要在你另一個對象的值和標籤必須聲明

<h:selectOneMenu value="#{backingBean.selectedvalue}"> 
    <f:selectItems value="#{backingBean.ListCar}" var="car" itemLabel="#{car.model}" itemValue="#{car.modelId}"/> 
</h:selectOneMenu>