Reputation: 33625
i want to change the variable value based on a condition so i tried the following:
<h:head>
<ui:param name="userCase" value="Insert" />
<ui:fragment rendered="#{employee.employeesBulkInsert==false}">
<ui:param name="userCase" value="Update" />
</ui:fragment>
<title>#{userCase} Employee </title>
</h:head>
but it doesn't work in the update case, it shows an empty string, any ideas why ?
i know that there are other solutions like defining the variable in the backing bean, or make the conditional ui fragment on the title tag directly, but i want to know why the above is not working, please advise, thanks.
Upvotes: 7
Views: 10919
Reputation: 1109570
The <ui:fragment>
is a render-time tag while the <ui:param>
is a tag handler (tag handlers are easily recognizeable by the absence of the rendered
attribute). So when the view get built, the <ui:param>
is set, regardless of the outcome of <ui:fragment>
. The rendered
attribute of <ui:fragment>
is only evaluated when the already-built view is to be rendered.
You want to make the condition using a tag handler instead, such as JSTL <c:if>
.
<ui:param name="userCase" value="Insert" />
<c:if test="#{not employee.employeesBulkInsert}">
<ui:param name="userCase" value="Update" />
</c:if>
(note that I removed the unnecessary boolean ==false
comparison)
Upvotes: 13
Reputation: 23906
Try using JSTL instead:
<c:set var="userCase" value="Insert" />
<c:if test="#{employee.employeesBulkInsert}">
<c:set var="userCase" value="Update" />
</c:if>
Tutorial here: http://www.ibm.com/developerworks/java/library/j-jstl0211/index.html
Upvotes: 2