我多次查看我的代码并没有发现有关它的问题。
我对 p:commandButton 呈现的属性有疑问。即使 getter 方法返回 false,p:commandButton 也会始终显示。这发生在 ajax 更新之后。
我有 ap:selectOneMenu 和 ap:ajax event="change",它设置 MB 并更新 ap:commandButton(具有基于布尔 getter 的渲染属性)和其他两个组件:第二个 p:selectOneMenu 和 ap: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>