p:commandButton 渲染属性在 ajax 更新后不起作用 (Primefaces 3.5)

2024-01-03

我多次收到我的代码,但没有发现有关它的问题。

我对 p:commandButton 呈现的属性有疑问。即使 getter 方法返回 false,p:commandButton 也始终显示。这是在 ajax 更新后发生的。

我有一个带有 p:ajax event="change" 的 p:selectOneMenu,它设置 MB 并更新 p:commandButton(具有基于布尔 getter 的渲染属性)和其他两个组件:第二个 p:selectOneMenu 和 p:outputLabel。

当我更改第一个 p:selectOneMenu 选择时,第二个 p:selectOneMenu 和 p:outputLabel 渲染没有问题,但 p:commandButton 始终显示。渲染的属性不会更新。

如果我刷新浏览器或者设置 update="@form",p:commandButton 将正确显示/隐藏。但请注意,所有组件都在同一个容器中。

我究竟做错了什么?代码:

<p:selectOneMenu id="cmbPais" value="#{pessoaController.selected.endereco.pais}">
    <f:selectItems value="#{paisController.itemsSelectOne}"/>
    <p:ajax event="change" update="cmbEstado,btnBuscaPeloEndereco,test"/>
</p:selectOneMenu>

<p:outputLabel id="test" value="#{pessoaController.selected.endereco.ok}"/>

<p:commandButton id="btnBuscaPeloEndereco" icon="ui-icon-correios" type="button" onclick="dlgCEP.show();" rendered="#{pessoaController.selected.endereco.ok}"/>

<p:selectOneMenu id="cmbEstado" value="#{pessoaController.selected.endereco.estado}">
    <f:selectItems value="#estadoController.getItemsSelectOne(pessoaController.selected.endereco.pais)}"/>
    <f:ajax event="change" render="cmbCidade" />
</p:selectOneMenu>

您只能使用 ajax 更新始终呈现的组件(即,当它没有rendered属性)。 JSF ajax 引擎不支持添加/删除 HTML 元素。它仅支持 HTML 元素的更改。

因此,将其包装在始终呈现的组件中,然后使用 ajax 更新它。

<p:selectOneMenu id="cmbPais" value="#{pessoaController.selected.endereco.pais}">
    <f:selectItems value="#{paisController.itemsSelectOne}"/>
    <p:ajax event="change" update="cmbEstado,btnBuscaPeloEndereco,test"/>
</p:selectOneMenu>

<h:panelGroup id="btnBuscaPeloEndereco">
    <p:commandButton icon="ui-icon-correios" type="button" onclick="dlgCEP.show();" rendered="#{pessoaController.selected.endereco.ok}"/>
</h:panelGroup>

也可以看看:

  • 当我想要 ajax 更新它时,为什么需要将 render="#{some}" 的组件嵌套在另一个组件中? https://stackoverflow.com/questions/9010734/why-do-i-need-to-nest-a-component-with-rendered-some-in-another-component-w/9010771#9010771
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

p:commandButton 渲染属性在 ajax 更新后不起作用 (Primefaces 3.5) 的相关文章

随机推荐