Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
908 views
in Technique[技术] by (71.8m points)

jsf 2 - Conditional variable definition in JSF

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...