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

标签 jsf jsf-2 jstl facelets

除了 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/

相关文章:

jsp - 如何仅使用 JSTL c :ForEach without javascript or jquery? 进行分页

html - 如何在新选项卡中打开页面但不给它焦点?(JSF 2.0)

javascript - 如何在模态中显示 primefaces 图表?

java - eclipse :Dynamic Web Application shows blank page when run on server

jsf - JSF 2.0文件上传

java - 缓存对象并在jsf中使用它们

jsp - 在JSP中以十六进制输出int

javascript - 在自定义 JSF 组件收到 AJAX 更新后调用自定义 JavaScript 代码

java - 弹出 ="true"无法在 JSF 2.0 环境的 Spring webflow 2.3.0 中使用

jsp - 使用 JSTL 检查集合大小