有条件地显示JSF组件

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

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

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

表单已经在页面中,只要点击一个特定的链接就可以将“render”属性设置为true。

是的,使用rendered属性。

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

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

例如

 <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操作符的重要性,如gtgelelt而不是>>=<=<作为尖括号<>是XML中的保留字符。 另请参阅相关的问答: parsingXHTML时出错:元素的内容必须包含格式正确的字符数据或标记 。

至于你的具体用例,让我们假设链接传递一个参数如下:

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

然后你可以显示如下的表单:

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

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

也可以看看:

  • Java EE 6教程 – expression式语言
  • 如果列表不为null并且size()> 0,那么如何显示JSF组件
  • 为什么我需要在另一个组件中使用rendered =“#{some}”嵌套一个组件,当我想要更新它时?

除了以前的post你可以有

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

Jsf 2.0