Kar*_*ara 3 java ajax jsf jstl primefaces
例如:当我点击按钮时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>
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种<c:if>在单击按钮时刷新 JSTL测试的方法。
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'}" />
Run Code Online (Sandbox Code Playgroud)
此外,您应该<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>
Run Code Online (Sandbox Code Playgroud)