2013-07-30 63 views
0

使用JSF2標記,是否可以將屬性參數傳遞給按鈕值?我知道<h:outputFormat>標籤,但我需要它是一個按鈕。我更喜歡下面的東西。參數化JSF2按鈕值?

我的XHTML代碼:

<h:button value="#{webCommonMessages['notifications']}" outcome="..."> 
    <f:param value="1"/> 
</h:button> 

我webCommonMessages包:

notifications=Notifications available: ({0}) 

這當然不工作,但沒有任何解決方案/解決方法嗎?

回答

2

不幸的是,JSF不提供內置的功能得到你想要的東西,所以基本上你有三種方式去:

  1. 創建自定義EL函數來獲取替換值,如在Pass parameters to messages from resource bundle to components other than h:outputFormat
  2. 創建導出取代的值作爲請求範圍在EL上下文變量可見的定製組件,如在How to use Parameterized MessageFormat with non-Value attributes of JSF components
  3. 使用由BalusC保持爲每組件實用程序庫OmniFaces提出的解決方案暗示10有效地融入了第二種方式。

所以,如果你是到第三條道路,我個人熱情地建議,解決方案基本如下:

<o:outputFormat value="#{webCommonMessages['notifications']}" var="t"> 
    <f:param value="1" /> 
</o:outputFormat> 
<h:button value="#{t}" outcome="..." /> 

在JSF項目中使用OmniFaces是可笑容易,並descibed on its homepage ,但要重複一遍:只需將它的jar添加到Web應用程序的/ WEB-INF/lib文件夾(或將其作爲maven依賴項包含它),並在facelet視圖中添加一個適當的名稱空間,如xmlns:o="http://omnifaces.org/ui"

值得一提的是,我最初的回答是錯誤的。它錯誤地認爲嵌套JSF的<h:outputFormat>將呈現必要的HTML元素。儘管如此,它是一個普通的導航鏈路真,如通過在JSF提供,例如,<h:link>,並且是像使用:

<h:link outcome="..."> 
    <h:outputFormat value="#{webCommonMessages['notifications']}"> 
     <f:param value="1" /> 
    </h:outputFormat> 
</h:link> 

你錯誤地認爲嵌套在<h:button><f:param>將被納入在你的消息從資源包。它用於將查詢參數追加到生成的URL。相反,你需要使用<h:outputFormat>標籤供您使用嵌套您的按鈕內,因此,不指定其value屬性:

<h:button outcome="..."> 
    <h:outputFormat value="#{webCommonMessages['notifications']}"> 
     <f:param value="1" /> 
    </h:outputFormat> 
</h:button> 
+0

只是去嘗試,並把它渲染的空按鈕(無值)和文本消息從OUTPUTFORMAT未來。我需要的是具有參數化值的按鈕。 – waste

+0

我更新了答案並修復了錯誤。 – skuntsel

+0

我會首先使用''h:link'',但OmniFaces看起來很有前途。非常感謝您的幫助。 – waste