gpt4 book ai didi

jsf - JSF 页面的 switch case 替代方案

转载 作者:行者123 更新时间:2023-12-04 21:50:54 24 4
gpt4 key购买 nike

除了 c:ifc:choose ,是否有更好的方法来实现多个组件中的 1 个组件的条件渲染。类似于 JSF 页面的 switch case 之类的东西?

最佳答案

对此的规范 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属性在 View 渲染期间评估,而 JSTL 标记在 View 构建期间执行。另见 JSTL in JSF2 Facelets... makes sense?

因此,如果评估条件所需的变量的范围比 View 范围(即请求范围)更窄,那么您应该使用 rendered属性代替。例如,当根据 ajax 请求重新渲染一组组件时。虽然 JSTL 标签在这种情况下可以同样有效地工作,但它们可能被“过早”评估(即在调用操作之前,这可能会改变条件)并且它们也会破坏 View 范围。另见 @ViewScoped breaks in tag handlers .

如果评估条件所需的变量具有更广泛的范围,例如 session 范围或应用程序范围或在某些模板客户端中进行了硬编码,那么 JSTL 标记会更有效,因为它们将仅在 View 构建期间进行评估,而不是在 View 呈现期间每次都进行评估。另见 How to make a grid of JSF composite component?

关于jsf - JSF 页面的 switch case 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9192866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com