在 Panel 中使用渲染时未调用 Primefaces Ajax 侦听器

Posted

技术标签:

【中文标题】在 Panel 中使用渲染时未调用 Primefaces Ajax 侦听器【英文标题】:Primefaces Ajax listener is not getting called when rendered is used in Panel 【发布时间】:2015-09-03 14:52:24 【问题描述】:

下面是正在使用的代码 sn-p。当我从下面的代码中删除渲染属性时,监听器被调用。但是使用渲染,它不会调用侦听器。 我的 PrimaryContactHomeAddressBean bean 位于 RequestScope 而 AddressManagedBean 具有 ViewScope。

<p:outputPanel id="countyPanel">
            <p:panelGrid
                id="primaryContactHomeZipPanel" rendered="#address.isMultipleCounty eq 'Yes'">
                <h:outputLabel for="primaryContactHomeCounty">
                    </h:outputLabel>
                <p:selectOneMenu id="primaryContactHomeCounty"
                    value="#addressManagedBean.countyName">
                    <f:selectItems value="#addressManagedBean.countyListDropdown" />
                        <p:ajax listener="#primaryContactHomeAddressBean.saveCountyName" process="@this"  update="primaryContactHomecountyName" partialSubmit="true"></p:ajax>
                </p:selectOneMenu>
                <p:message for="primaryContactHomeCounty" />


            </p:panelGrid>
        </p:outputPanel>

【问题讨论】:

&lt;h:outputLabel for="primaryContactHomeCounty" 上没有右大括号 这是一个错字。现已添加。 #address 在什么范围内? #address 在 RequestScope 中。 你有封闭的h:form吗? 【参考方案1】:

我可以通过将isMultipleCounty 变量移动到ViewScoped Bean 即AddressManagedBean. 来解决这个问题

【讨论】:

【参考方案2】:

此行不遵循 JavaBean 标准。

rendered="#address.isMultipleCounty eq 'Yes'"

如果 getter 以 is 开头,那么它应该返回一个布尔值,但在这里您正在检查一个字符串。如果它返回一个布尔值,则删除eq 'Yes',无论将其重命名为multipleCounty

【讨论】:

代码只有在包含渲染时才不起作用,其中的语法不正确?对我来说,这听起来像是真正的问题。 我同意不符合Java标准,但不存在编译问题。即使我使用 getMultipleCounty 而不是 isMultipleCounty,问题仍然存在。 只有多个国家/地区? 看,如何命名变量并不重要。它只是标准,我们应该遵循以获得更好的可读性。这个问题不是因为命名约定。 我知道你来自哪里。但是,为什么在改变变量的范围后它会起作用?如果 rendered="#address.isMultipleCounty eq 'Yes'" 有问题

以上是关于在 Panel 中使用渲染时未调用 Primefaces Ajax 侦听器的主要内容,如果未能解决你的问题,请参考以下文章

初始渲染时未定义 useRef 值

单击提交时未调用Django视图功能

在路由更改上使用过滤器时未渲染路由模型

Handsontable 无法在 q-tab-panel 中正确渲染

从模型的访问器抛出自定义Laravel异常时未调用方法render()

Sencha Touch Panel 渲染问题