在 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>
【问题讨论】:
<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 侦听器的主要内容,如果未能解决你的问题,请参考以下文章
Handsontable 无法在 q-tab-panel 中正确渲染