JSF2

时间:2012-11-30 13:31:53

标签: jsf-2

我有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设置变量一样。

1 个答案:

答案 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>

另见: