2012-09-18 51 views
0

我是JSF 2.0的新手,試圖向我的頁面輸出消息。我想要一個表單接受一些輸入,做一些處理,並顯示一些輸出。似乎非常簡單的權利?不過,我不希望在我的支持bean定義屬性顯示通過輸出:回覆JSF 2.0的消息頁面

<h:outputText value="#{bean.property}" /> 

這種辦法似乎很凌亂我。我需要一個成員變量來顯示每條狀態消息。我也不想將輸出顯示綁定到表單變量,如下所示:

<h:inputText id="someId" /> 
<h:message for="someId" /> 

因爲我的狀態結果沒有相應的表單變量。設置的消息,並使用全球的消息:

<h:messages globalOnly="true" /> 

無法正常工作,或者是因爲我可能需要更新多個元素在頁面上(不是一概而論我的所有狀態信息放到同一div)。

來自Spring MVC,可以在傳遞給View的ModelAndView對象上設置任意屬性,然後從視圖中訪問這些屬性。 JSF中有這樣做的相應方法嗎?

謝謝。

回答

2

爲了方便地獲得視圖任意變量,您可以定義在例如地圖通過將按照faces-config.xml要求範圍:

<managed-bean> 
    <description>Request scoped map for general usage</description> 
    <managed-bean-name>map</managed-bean-name> 
    <managed-bean-class>java.util.HashMap</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

您可以在支持bean注入這張地圖上,或以編程方式提出要求,然後把東西在裏面。例如: -

@ManagedBean 
public class GeneralMapBacking { 

    @ManagedProperty("#{map}") 
    private Map<Object, Object> map; 

    public void onPreRenderView() { 
     map.put("foo", "bar"); 
    } 

    public void setMap(Map<Object, Object> map) { 
     this.map = map; 
    } 
} 

您可以在一個facelet通過EL參考此圖,例如:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
> 
    <h:body> 
     <f:event listener="#{generalMapBacking.onPreRenderView}" type="preRenderView" /> 

     #{map.foo}  
    </h:body> 
</html> 
+0

這是一個非常好的答案。謝謝。 – dev

0

不知道我明白這個問題。我也不熟悉Spring MVC,我必須說這個例子通過了我。

但我認爲它基本上聽起來像你想要構建輸出serverside或使用另一個組件。

例如,使用一個單獨的<h:outputText>並將它與一個返回連接數據的getter一起使用。

或者您應該使用<h:dataTable>來顯示您的數據?或者你可能想使用其他組件輸出。這聽起來像你只是想要一個文本框,爲此我自己會使用連接的outputText。

對於美觀的輸出結果,您可能需要查看primefaces,richfaces或icefaces。我更喜歡自己primefaces,也許這會好看:

http://www.primefaces.org/showcase-labs/ui/dataListUnordered.jsf

+0

是啊,我不想一個getter綁定到一個輸出的文本。那麼我將爲每個我想要基本設置的UI字段設置一個getter。 – dev