3

例如:当我点击按钮时A。我得到以下文字:you have choosed A

但是当我更改按钮时,我得到相同的文本,虽然#{bean.str}更改的值

这是我的代码:

<p:selectOneButton id="selectId" value="#{bean.str}">
            <f:selectItem itemLabel="A" itemValue="1" />
            <f:selectItem itemLabel="B" itemValue="2" />
            <f:selectItem itemLabel="C" itemValue="3" />
            <f:ajax event="change" render="tabView" listener="#{bean.change}" />
</p:selectOneButton>

<c:if var="test" test="#{bean.str =='1'}">
        <h:outputText value="you have choosed A" />
</c:if>
<c:if test="#{beanApplication.perspective=='2'}">
        <h:outputText value="you have choosed B" />
</c:if>
<c:if test="#{beanApplication.perspective=='3'}">
        <h:outputText value="you have choosed C" />
</c:if>

<c:if>当我单击按钮时,我正在寻找一种刷新 JSTL测试的方法。

4

3 回答 3

5

JSTL 在 JSF 视图构建期间运行,而不是在 JSF 视图呈现期间运行。但是,在此特定示例中,提交的值仅在视图构建时间之后设置为 bean 属性。视图构建时间在 JSF RESTORE_VIEW 阶段运行,但 bean 属性在 JSF UPDATE_MODEL_VALUES 阶段设置。

您需要在渲染期间评估条件。使用为此提供的 JSF 组件的rendered属性。

<h:outputText value="you have chosen A" rendered="#{bean.str == '1'}" />
<h:outputText value="you have chosen B" rendered="#{bean.str == '2'}" />
<h:outputText value="you have chosen C" rendered="#{bean.str == '3'}" />

此外,您应该<p:ajax>在 PrimeFaces 组件中使用,而不是<f:ajax>. 此外,您应该确保tabView<f:ajax render>(以及等效地<p:ajax update>)中引用的组件涵盖上述三个组件。这是一个完整的启动示例:

<p:selectOneButton id="selectId" value="#{bean.str}">
    <f:selectItem itemLabel="A" itemValue="1" />
    <f:selectItem itemLabel="B" itemValue="2" />
    <f:selectItem itemLabel="C" itemValue="3" />
    <p:ajax listener="#{bean.change}" update="tabView" />
</p:selectOneButton>

<h:panelGroup id="tabView">
    <h:outputText value="you have chosen A" rendered="#{bean.str == '1'}" />
    <h:outputText value="you have chosen B" rendered="#{bean.str == '2'}" />
    <h:outputText value="you have chosen C" rendered="#{bean.str == '3'}" />
</h:panelGroup>

也可以看看:

于 2012-11-12T14:21:28.593 回答
1

您可以将所有条件放在面板中并在按钮单击时重新渲染

于 2012-11-12T14:16:38.583 回答
0

在您的 3 outputText 上使用“渲染”属性

于 2012-11-12T14:20:32.703 回答