我有2 <h:panelGroup
条件文字显示。当我运行id为空时,此条件执行正常#{empty personBean.person.id}
,我看到其中的文本。如果我在面板中放置<h2>#{buttonText}</h2>
,而不是在h2标签中正确显示buttonText。
现在问题:
在下面的代码中,如果我将<h2>#{buttonText}</h2>
放在最后,而不是我总是得到值更新成员,由于这个原因,我不能在buttonText
的任何地方使用 <h:panelGroup rendered="#{empty personBean.person.id}">
<h1>Add Information</h1>
<i>Use the form below to add your information.</i>
<ui:param name="buttonText" value="Add member" />
</h:panelGroup>
<h:panelGroup rendered="#{not empty personBean.person.id}">
<h1>Update Information</h1>
<i>Use the form below to edit your information.</i>
<ui:param name="buttonText" value="Update member" />
</h:panelGroup>
<h2>#{buttonText}</h2>
的值页面如下。有人告诉我该怎么做?
<ui:param
我无法使用<c:set var="buttonText" value="Add member" />
,就像我使用{{1}} JSTL设置变量一样。
答案 0 :(得分:2)
在视图渲染时间期间不评估<ui:param>
(问自己;它是否必然生成任何HTML?),但是在视图构建期间。因此,rendered
属性根本没有被考虑在内,你实际上最终会被解释,而后者总是会覆盖前者。
从技术上讲,你需要“渲染”(“构建”是一个更好的术语,但它看起来有点奇怪)它有条件地使用视图构建时标记,例如<c:if>
。但是,在您的特定构造中,最好只检查<ui:param>
的值中的相同条件,并且只有一个而不是两个:
<ui:param name="buttonText" value="#{empty personBean.person.id ? 'Add' : 'Update'} member" />
或直接在您需要的地方直接评估
<h2>#{empty personBean.person.id ? 'Add' : 'Update'} member</h2>