有条件地显示 JSF 组件

Conditionally displaying JSF components

提问人:Haikal Nashuha 提问时间:2/2/2011 最后编辑:BalusCHaikal Nashuha 更新时间:9/16/2022 访问量:196833

问:

首先,我是Java EE的新手,具有很强的ASP .NET开发背景。 我已经浏览了网络,我可能会错过这一点,但似乎没有关于如何将后备 Bean 类连接到 JSF 组件的简单而直接的教程。

一个很好的例子是这样的,目前我正在尝试创建一个 JSF 页面,其中有一组链接作为菜单栏和一组表单。我打算做的是,当单击链接时,将呈现一个特定的表单。

在 ASP.NET 中,我可以轻松检索元素,然后将属性设置为可显示。我想知道是否有简单的方法(哎呀,甚至任何方法)可以在 JSF 中做到这一点。

表单已经在页面中,只需在单击特定链接时将“render”属性设置为true即可。

JSF 组件 条件渲染

评论


答:

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 时出错:元素的内容必须由格式正确的字符数据或标记组成gtgelelt>>=<=<<>

至于您的具体用例,我们假设链接正在传递如下所示的参数:

<a href="page.xhtml?form=1">link</a>

然后,您可以显示如下所示的表单:

<h:form rendered="#{param.form eq '1'}">

#{param} 是一个隐式 EL 对象,引用表示请求参数的 Map

另请参阅:

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 是一个问答网站,而不是一个论坛。这是在问答网站上,没有必要在达成协议后重复已经给出的答案。只需将其删除即可。