2013-07-10 67 views
0

在我的問題中,我必須根據條件顯示h:panelGroup。對於此h:panelGrouprendered屬性已被設置。如何根據條件顯示h:panelGroup

<h:panelGroup rendered="#{not empty program.categories}"> 
    <li> 
     <strong>Category: </strong> 
     <h:outputLabel value="#{not empty program.categories ? 'A':'N/A'}"/> 
    </li> 
</h:panelGroup> 

我現在想保持狀態像下面的代碼:

<c:if test="${program.distTypeName != 'X' || program.distTypeName != 'Y' || program.distTypeName != 'Z'}"> 

<h:panelGroup rendered="#{not empty program.categories}"> 
    <li> 
     <strong>Category: </strong> 
     <h:outputLabel value="#{not empty program.categories ? 'A':'N/A'}" /> 
    </li> 
</h:panelGroup> 

,但是這是行不通的。請告訴我我做錯了什麼。基本上,如果disType不在x,y,z中,那麼我需要顯示h:panelGroup

我們如何用jstl標籤測試not in條件? 在此先感謝。

+1

此[鏈接](http://stackoverflow.com/questions/4870462/conditionally-displaying-jsf-components/4870557#4870557)將幫助您。 – danRod

+0

但我怎麼可以在我的情況下使用呈現的atrribute .. 不工作..我應該檢查條件只爲這個h:panelGroup..not爲整個表單。請建議。 – sahithi

+0

在'''rendered'屬性內移動''條件 – Andy

回答

0

JSTL標籤和JSF標籤不同步。 JSTL標籤在構建時運行,而JSF標籤在渲染時運行。這就是爲什麼你看到一個奇怪的行爲。您應該使用JSF rendered屬性而不是c:if

此外,char比較的工作方式也與Java不同。字符在EL表達式中的行爲類似於字符串,這意味着!=運算符不會爲String比較提供適當的結果。

<c:if test="${program.distTypeName != 'X' || program.distTypeName != 'Y' || program.distTypeName != 'Z'}"> 

以上c:if語句可以轉換爲渲染屬性類似的字符

<h:panelGroup rendered="#{program.distTypeName.compareTo('X') != 0 || program.distTypeName.compareTo('Y') != 0 || program.distTypeName.compareTo('Z') != 0}"> 

或ASCII表示也可以在這裏使用,如果distTypeNamechar

<h:panelGroup rendered="#{program.distTypeName ne 88 || program.distTypeName ne 89 || program.distTypeName ne 90}"> 

相關的職位

https://stackoverflow.com/a/4154930/892994

+0

這可能不是原因。作爲OP的代碼到目前爲止是完全合法的。這隻會導致問題,如果到目前爲止發佈的代碼實際上是在一個JSF轉發器組件,如''或'',但沒有問題表明。 bean名稱'#{program}'已經是一個很大的暗示,它代表了一個不是支持bean的實體。 – BalusC