开发者

Conditionally displaying JSF components

First, I am new to Java EE, came from a strong ASP .NET development background. I have gone through the net, and I might miss this but it seems like there is no simple and straight-to-the-point tutorials on how I could connect backing bean class to a JSF components.

A good example is like this, currently I am trying to create a JSF page where there开发者_如何学C is a set of links as menu bar and a set of forms. What I am planning to do is, when clicking a link, a particular form will be rendered.

In ASP.NET, I could easily retrieve the element and then set the attribute to be displayable. I am wondering if there is easy way (heck, even any way) to do this in JSF.

The forms is already in the page, it is just a matter of setting the "render" attribute to true when I click a particular link.


Yes, use the rendered attribute.

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

You usually tie it to the model rather than letting the model grab the component and manipulate it.

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

Note the importance of keyword based EL operators such as gt, ge, le and lt instead of >, >=, <= and < as angle brackets < and > are reserved characters in XML. See also this related Q&A: Error parsing XHTML: The content of elements must consist of well-formed character data or markup.

As to your specific use case, let's assume that the link is passing a parameter like below:

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

You can then show the form as below:

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

(the #{param} is an implicit EL object referring to a Map representing the request parameters)

See also:

  • Jakarta EE Eutorial - Chapter 9. Expression Language
  • How to show JSF components if list is not null and has size() > 0
  • Why do I need to nest a component with rendered="#{some}" in another component when I want to ajax-update it?


In addition to previous post you can have

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

Jsf 2.0


we can render a component in the form, for that we will use 'rendered' attribute

This attribute takes true/false. If the expression evaluates to a true then the specified component will be rendered otherwise it wont render in the screen.

Ex: I want to render a button for some condition.

<p:commandButton id="addCommentsBtn"
    value="Add Comments" title="Add Comments"
    rendered="#{backingBean.booleanResultOrVariable}">
</p:commandButton>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜