2013-07-04 19 views
2

我已經使用BalusC's template開始了我自己的自定義標記處理程序(純XHTML,無渲染器),我們將其稱爲bean:input - 典型的標籤,輸入,消息三重奏。它的使用是這樣的:我可以讓JSF2跳過渲染自定義標籤而不修改標籤本身嗎?

<h:panelGrid columns="3"> 
    <bean:input label="input1:" bean="#{bean1}" property="name" /> 
    <bean:input label="input2:" bean="#{bean2}" property="name" /> 
    <bean:input label="input3:" bean="#{bean3}" property="name" /> 
</h:panelGrid> 

問題是,輸入是互斥的(即只有其中一個應該出現)。顯示哪個輸入由渲染時間通過視圖參數確定。我該怎麼做呢?

我不能使用<ui:fragment>,因爲這會搞亂了panelGrid,在標籤上規定rendered="false"沒有效果,並且我有點猶豫,我的包裹標籤實現的一大<c:if test="#{rendered}"> - 有沒有更好的/內置的方式告訴JSF它應該簡單地跳過渲染這個特定的標籤?


注:<c:if>標籤做有趣的事情(如渲染,不應該呈現一個標籤,但沒有相應的輸入框),當我重新渲染了部分更新的網格。將rendered屬性添加到組件本身可以修復該問題。

回答

1

將對rendered屬性的支持添加到標記文件並將其重新應用於標記文件的內容。

<bean:input label="input1:" bean="#{bean1}" property="name" rendered="..." /> 

我有點猶豫,我的包裹標籤實現的一大<c:if test="#{rendered}">

這也許醜陋,但肯定這是一種方式。

+0

「在此添加支持」意味着將其應用於自定義標記文件中的所有子組件或普通「」? – mabi

+1

您的選擇。 ''在視圖構建時運行。 ''在視圖渲染時運行。如果你有視圖範圍的bean,並且使用的是比2.1.18更早的Mojarra,那麼''會破壞視圖範圍的bean,如果'rendered'屬性後面的屬性引用視圖範圍的bean屬性的話。 – BalusC

+0

因爲我可以控制的環境中,我已經升級到鑽嘴魚科-2.1.22,我現在使用''在TAGFILE。感謝你的回答! – mabi