2012-09-07 71 views
1

我試圖更改JSF 1.1頁來有條件地隱藏頁面的某些部分。該頁面使用混合的原始HTML和標籤構建。具體來說,我有以下幾點:JSF 1.1:有條件地隱藏原始HTML和標籤

<table> 
    <tr> 
    <td>Foo</td> 
    <td><h:inputText ... /></td> 
    </tr> 
    <tr> 
    <td>Bar</td> 
    <td><h:inputText ... /></td> 
    </tr> 
    <!-- more stuff, including <h:dataTable> 
</table> 

我想有條件地隱藏了整個表標籤來包裝,但我似乎無法弄清楚。以下是我所嘗試的:

  • 將標記包裝在<h:panelGroup rendered="...">中。雖然這正確顯示/隱藏標記,但所有原始的HTML都從生成的HTML中剝離。
  • 將標記包裝在<f:verbatim>中。這是行不通的,因爲逐字標記在JSF 1.1中沒有呈現的屬性。
  • 將整個東西包裝在<h:panelGroup rendered="..."><f:verbatim>組合中。這與第一次嘗試具有相同的效果。
  • 我也試過<f:view><f:subview>無濟於事。

我知道可以在JSF頁面中包含JSTL標記並使用<c:if>但我想避免這種情況。有任何想法嗎?

注:我意識到它是(至少有一些)被認爲是不好的做法混合HTML和JSF,但是這個頁面是由別人創建的,我只需要修改它(它有點大的頁面和HTML以上只是它的一小部分)..

回答

1

要麼替換<table><h:panelGrid>

<h:panelGrid columns="2"> 
    <h:outputText value="Foo" /> 
    <h:inputText ... /> 

    <h:outputText value="Bar" /> 
    <h:inputText ... /> 

    <!-- more stuff, including <h:dataTable> 
</h:panelGrid> 

或使用CSS顯示:無/塊:

<table style="display: ${some condition ? 'none' : 'block'};"> 

或者只是升級到JSF 1.2。從技術上講,JSF 1.1 Web應用程序可以輕鬆升級到JSF 1.2,而無需更改任何代碼。這只是更新JAR並更改faces-config.xml根聲明以用JSF 1.2 XSD替換JSF 1.1 DTD的問題。 JSF 1.2帶有一個改進的視圖處理器,它可以消除<f:verbatim>的噩夢(即不再需要它)。它還附帶了很多很多錯誤修復和性能增強功能,您會非常感謝。


無關的具體問題,爲您的聲明混合HTML和JSF是一種不好的做法,這未必是真實的。至少從JSF 1.2開始就沒有了。在JSF 1.0/1.1上,您需要使用<f:verbatim>,這反過來確實是一種開發/維護的痛苦。這導致混淆JSF/HTML的錯誤神話是「不好的」。關於這一點,請參閱What are the main disadvantages of Java Server Faces 2.0?