10

コードを何度も確認しましたが、質問は見つかりませんでした。

p:commandButtonのレンダリングプロパティに問題があります。getterメソッドがfalseを返した場合でも、p:commandButtonは常に表示されます。これは、ajaxの更新後に発生します。

MBを設定し、ap:commandButton(ブールゲッターに基づくレンダリングされたプロパティを使用)と他の2つのコンポーネント(2番目のp:selectOneMenuとap:outputLabel)を更新するap:ajax event = "change"を含むap:selectOneMenuがあります。

最初のp:selectOneMenu選択を変更すると、2番目の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>
4

2 に答える 2

18

rendered常にレンダリングされるコンポーネント(つまり、属性がない場合)のみをajax-updateできます。JSF ajaxエンジンは、HTML要素の追加/削除をサポートしていません。HTML要素の変更のみをサポートします。

したがって、常にレンダリングされるコンポーネントでラップし、代わりにajax-updateします。

<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>

参照:

于 2013-02-20T13:14:24.413 に答える
0

コードを変更したくない場合は、レンダリングされたejの代わりにcssを使用できます。

<x:element style="#{condition ? 'visibility: hidden':' visibility: visible'}" />

編集:これは一部のユーザーが元に戻すことができるため、要素を安全にする必要がある場合は使用しないでください。ただし、視覚的な目的でのみ非表示/表示したい場合は、それを使用できます。

于 2018-06-29T12:02:51.487 に答える