提问人:Haikal Nashuha 提问时间:2/2/2011 最后编辑:BalusCHaikal Nashuha 更新时间:9/16/2022 访问量:196833
有条件地显示 JSF 组件
Conditionally displaying JSF components
问:
首先,我是Java EE的新手,具有很强的ASP .NET开发背景。 我已经浏览了网络,我可能会错过这一点,但似乎没有关于如何将后备 Bean 类连接到 JSF 组件的简单而直接的教程。
一个很好的例子是这样的,目前我正在尝试创建一个 JSF 页面,其中有一组链接作为菜单栏和一组表单。我打算做的是,当单击链接时,将呈现一个特定的表单。
在 ASP.NET 中,我可以轻松检索元素,然后将属性设置为可显示。我想知道是否有简单的方法(哎呀,甚至任何方法)可以在 JSF 中做到这一点。
表单已经在页面中,只需在单击特定链接时将“render”属性设置为true即可。
答:
174赞
BalusC
2/2/2011
#1
是的,请使用该属性。rendered
<h:form rendered="#{some boolean condition}">
通常将其绑定到模型,而不是让模型抓取组件并对其进行操作。
F.D.(英语:F.D.)
<h:form rendered="#{bean.booleanValue}" />
<h:form rendered="#{bean.intValue gt 10}" />
<h:form rendered="#{bean.objectValue eq null}" />
<h:form rendered="#{bean.stringValue ne 'someValue'}" />
<h:form rendered="#{not empty bean.collectionValue}" />
<h:form rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:form rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />
请注意基于关键字的 EL 运算符(如 、 和 代替 、 和 )的重要性,并作为尖括号,并且是 XML 中的保留字符。另请参阅此相关问答:解析 XHTML 时出错:元素的内容必须由格式正确的字符数据或标记组成。gt
ge
le
lt
>
>=
<=
<
<
>
至于您的具体用例,我们假设链接正在传递如下所示的参数:
<a href="page.xhtml?form=1">link</a>
然后,您可以显示如下所示的表单:
<h:form rendered="#{param.form eq '1'}">
(#{param}
是一个隐式 EL 对象,引用表示请求参数的 Map
)
另请参阅:
- Jakarta EE Eutorial - 第 9 章。表达语言
- 如果 list 不为 null 且 size() > 0,如何显示 JSF 组件
- 当我想ajax更新时,为什么我需要将rendered=“#{some}”的组件嵌套在另一个组件中?
15赞
tosha Shah
10/12/2012
#2
除了上一篇文章,您还可以拥有
<h:form rendered="#{!bean.boolvalue}" />
<h:form rendered="#{bean.textvalue == 'value'}" />
JSF 2.0
评论
1赞
Kalle Richter
5/4/2018
这么小的补充不值得单独回答。
0赞
Arun
3/25/2021
#3
我们可以在表单中渲染一个组件,为此我们将使用“rendered”属性
此属性采用 true/false。如果表达式的计算结果为 true,则将呈现指定的组件,否则它不会在屏幕中呈现。
例如:我想在某种条件下渲染一个按钮。
<p:commandButton id="addCommentsBtn"
value="Add Comments" title="Add Comments"
rendered="#{backingBean.booleanResultOrVariable}">
</p:commandButton>
评论
0赞
Robert
3/25/2021
这是正确的,但问题是关于渲染,而不是禁用。如果您只是禁用它,则显示不允许用户查看的信息不会变得更好。
0赞
Arun
9/16/2022
谢谢罗伯特,我已经修改了我的解决方案
0赞
BalusC
9/16/2022
Stack Overflow 是一个问答网站,而不是一个论坛。这是在问答网站上,没有必要在达成协议后重复已经给出的答案。只需将其删除即可。
评论