【问题标题】:how to refresh jstl test using ajax of primefaces?如何使用primefaces的ajax刷新jstl测试?
【发布时间】:2012-10-31 23:09:49
【问题描述】:

例如:当我点击按钮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 &lt;c:if&gt; 测试的方法。

【问题讨论】:

  • 您忘记混淆一些beanApplication.perspective 表达式,特此在您的问题中引入红鲱鱼。请在真实代码中进行编辑并对其进行测试并复制粘贴真实代码(因此,之后不要在问题中进行编辑)。

标签: java ajax jsf primefaces jstl


【解决方案1】:

JSTL 在 JSF 视图构建期间运行,而不是在 JSF 视图渲染期间运行。但是,在此特定示例中,提交的值仅设置为 bean 属性 after 查看构建时间。视图构建时间在 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'}" />

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

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

另见:

【讨论】:

  • 谢谢你回复我的朋友!我尝试了您的建议,但得到了相同的结果。现在我尝试将所有&lt;h:outputText 放入&lt;h:panelGroup,然后用&lt;f:ajax 渲染他的id,而不是&lt;p:ajax
  • 不客气。 JSTL 问题对初学者来说确实不是很明显,但我希望错误渲染问题对初学者来说足够明显(因为这在 ajax 响应中很明显)。
【解决方案2】:

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

【讨论】:

  • 什么是面板组件?
  • 我认为@BalusC 在帖子中给出了带有示例的面板组件,组件名称为 h:panelGroup
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2013-09-07
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多