有条件地显示JSF组件

时间:2011-02-02 03:17:58

标签: jsf components conditional-rendering

首先,我是Java EE的新手,来自强大的ASP .NET开发背景。 我已经浏览了网络,我可能会错过这个,但似乎没有关于如何将支持bean类连接到JSF组件的简单直接的教程。

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

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

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

3 个答案:

答案 0 :(得分:144)

是的,请使用rendered属性。

<h:form rendered="#{some boolean condition}">

您通常将其绑定到模型而不是让模型抓住组件并对其进行操作。

E.g。

<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'}" />

请注意gt的重要性,例如gelelt>,而不是>=<=<<作为尖括号><a href="page.xhtml?form=1">link</a> 是XML中的保留字符。另请参阅此相关问答:keyword based EL operators

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

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

然后,您可以按以下方式显示表单:

#{param}

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

另见:

答案 1 :(得分:11)

除了上一篇文章,您还可以

<h:form rendered="#{!bean.boolvalue}" />
<h:form rendered="#{bean.textvalue == 'value'}" />

Jsf 2.0

答案 2 :(得分:-1)

同样,我们可以禁用表单中的组件,为此我们将使用“禁用”。

该属性为真/假。如果表达式的计算结果为真,则指定的组件将被禁用,否则将被启用。

例如:我想在某些情况下禁用按钮。

ValueError: time data '0 2020-12-22\n5   2020-02-22 Name: Date, dtype: datetime64[ns]' does not match format '%Y-%m-%d'