2009-07-20 35 views
1

您是否知道在運行時選擇不同的facelets組件的方法?在運行時解析facelets組件

我有一些類似下面的代碼:

<s:fragment rendered="#{r== 'case1'}"> 
    <div> 
      <ui:include src="case1.xhtml" /> 
    </div> 
</s:fragment> 
<s:fragment rendered="#{r== 'case2'}"> 
    <div> 
      <ui:include src="case2.xhtml" /> 
    </div> 
</s:fragment> 

我想寫

<ui:include src="#{r}.xhtml" /> 

感謝。

回答

1

您的解決方案應該可以正常工作 - src attribute可以是文字或EL表達式。您可能希望使表達式使用託管bean屬性或通過function來解決它。這樣,你可以確保它永遠不會爲空(如果是的話,你可以返回一個空頁面的引用)。如果#{r}解析爲null,您可能會收到404錯誤。

<ui:include src="#{myfn:resolveNotNull(r, 'pageIfRIsNull')}.xhtml" /> 
0

不確定。另一種方法是使用帶有ui:insert的模板,然後直接指向使用ui:以編程方式定義的case1或case2。

0

可以有選擇地使用ui:include與其他JSF組件。例如:

<h:panelGroup rendered="#{!menuMBean.passwordResetRequired}"> 
    <ui:include src="homeNormal.xhtml" /> 
</h:panelGroup>