例如:当我点击按钮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>
我正在寻找一种刷新 JSTL 的方法 <c:if>
当我点击按钮时进行测试。
最佳答案
JSTL 在 JSF View 构建期间运行,而不是在 JSF View 呈现期间运行。但是,提交的值在此特定示例中仅在 View 构建时间之后 设置为 bean 属性。 View 构建时间在 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>
另见:
关于java - 如何使用 primefaces 的 ajax 刷新 jSTL 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345212/