0

我有 2 个<h:panelGroup用于条件文本显示。当我在 id 为空的情况下运行时,这个条件执行得很好#{empty personBean.person.id},并且我看到了其中的文本。如果我放入<h2>#{buttonText}</h2>面板,我会看到 buttonText 正确显示在 h2 标记中。

现在问题:

在下面的代码中,如果我<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" />JSTL 设置变量一样使用。


不会在<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>

也可以看看:

4

1 回答 1

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>

也可以看看:

于 2012-11-30T13:35:53.843 回答