我多次收到我的代码,但没有发现有关它的问题。
我对 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(使用前将#替换为@)