除c:if
或c:choose
之外,有沒有更好的方法可以在幾個組件中實現1組件的條件渲染。像JSF頁面的開關盒一樣?JSF頁面的開關盒替代方案
回答
此規範的JSF方法使用rendered
屬性。下面是一些例子:
<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue eq null}" />
<h:someComponent rendered="#{bean.stringValue ne 'someValue'}" />
<h:someComponent rendered="#{not empty bean.collectionValue}" />
<h:someComponent rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:someComponent rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />
與JSTL標記不同的是,視圖在屬性rendered
評估渲染時間,而JSTL標籤期間視圖生成時執行。另請參見JSTL in JSF2 Facelets... makes sense?
因此,如果評估條件所需的變量的範圍比視圖範圍(即請求範圍)更窄,則應該使用rendered
屬性。例如,在ajax請求上重新呈現一組組件時。雖然JSTL標籤可能在這種情況下工作同樣好,但它們可能被「過早」評估(即在調用操作之前,這可能會改變條件),並且它們也會破壞視圖範圍。另見@ViewScoped
breaks in tag handlers。
如果評估條件所需的變量具有更寬的範圍,例如,會話範圍內或應用程序範圍內或在某些模板客戶端中進行了硬編碼,則JSTL標記效率更高,因爲它們將在視圖構建時間內進行評估,而不是在視圖渲染時間內每次進行評估。另請參見How to make a grid of JSF composite component?
您可以使用rendered
屬性:
<h:commandButton rendered="#{value == 'value1'}"/>
<h:commandButton rendered="#{value == 'value2'}"/>
它並不像真正的情況下運營商那麼清晰,但它是在普通的JSF。
你能澄清,如果它比使用'c:if'好怎麼辦? – 2012-02-08 12:30:23
@user不知道。您不需要導入jstl命名空間:) – 2012-02-08 16:38:29
Hans Bergsten和Core JavaServer Faces提供的書籍JavaServer Faces都提到使用c:if是低效但不是如何?無論如何,如果你可以用標準的JSF標籤來實現它們,爲什麼要使用它們。 – Ravi 2012-02-08 17:45:41
- 1. JSF中JSTL標籤的替代方案
- 2. DOMPDF頁面背景(或替代方案?)
- 3. 範圍不能用於開關盒,需要很好的替代方案
- 4. ClearCase開源替代方案
- 5. ui的替代方案:包括在JSF 2.0中動態包含頁面
- 6. Documentum的開源替代方案
- 7. Drop Box的開源替代方案
- 8. 替代開關案例讀取XML
- 9. 替代開關案例在android
- 10. asp:asp.net面板的替代方案mvc
- 11. 用戶控件上的UpdatePanel的替代方案(ASCX頁面)
- 12. LINQ to SQL在高負載頁面上的替代方案
- 13. 開源隱形reCAPTCHA替代方案
- 14. 分頁和替代解決方案
- 15. playN替代方案
- 16. Example.com替代方案
- 17. TFS替代方案
- 18. WSO2替代方案
- 19. Nginx:more_clear_headers替代方案
- 20. AppDomain.AppendPrivatePath替代方案?
- 21. Javascript。替代方案
- 22. android.net.wifi.WIFI_HOTSPOT_CLIENTS_CHANGED替代方案
- 23. MediaMetadataRetriever替代方案?
- 24. HTMLElementVariable.animate(...)替代方案?
- 25. 替代方案deleteOnExit
- 26. VSTO替代方案
- 27. 如何更改Drupals菜單替代方案以創建頁面
- 28. 嵌套頁面控件有哪些設計替代方案?
- 29. 在沙盒解決方案中定製.aspx頁面的代碼隱藏
相關:http://stackoverflow.com/questions/4870462/conditionally-displaying-html-elements/4870557#4870557 – BalusC 2012-02-08 12:18:20
@BalusC:你可以澄清,如果它是更好地使用'rendered'屬性比使用'c:if'? – 2012-02-08 18:49:45
我想因爲我會爲多個組件提供多個「渲染」屬性,所以我可能會更好地使用一組'if''否則',這樣如果我的第一個條件比我更有可能是真實的保存進一步的條件檢查 – 2012-02-08 19:14:04