1

マネージド Bean で問題が発生した場合にポップアップを表示したいという単純な問題があります。Bean は、getter/setter メソッドを使用して発生できる例外のリストを保持します。

xhtmlは次のようになります

      <rich:panel>
    <h:form>
        <a4j:commandButton value="Compute Mission"
            action="#{missionHandler.generateMissionFeasability}"
            render="popupPanel">
        </a4j:commandButton>
    </h:form>
   </rich:panel>
   <rich:popupPanel id="popupPanel" modal="true" autosized="true"
    resizeable="false" moveable="false" rendered="#{not empty    missionHandler.exceptions}">
    <f:facet name="header">
        <h:outputText value="Exceptions raised during the processing    " />
    </f:facet>
    <f:facet name="controls">
        <h:outputLink value="#"
            onclick="#{rich:component('popupPanel')}.hide();return false;">
        </h:outputLink>
    </f:facet>
    </rich:popupPanel>

ご覧のとおり、Bean で generateMissionFeasibility メソッドを呼び出すコマンド ボタンがあります。このメソッドは (とりわけ) 例外リストに例外を追加します。

リストをチェックして(空かどうか)ポップアップを表示したい

上記のコードは、Bean のメソッドの終了前にポップアップがレンダリングされ、リストが最初は空であると思われるため、機能しません。

4

2 に答える 2

3

レンダリング後にポップアップ パネルを表示する 1 つの方法は、変更することです。

rendered="#{not empty missionHandler.exceptions}"

show="#{not empty missionHandler.exceptions}"
于 2013-02-24T23:13:27.477 に答える
1

missionHandler.exceptionsビューが最初にレンダリングされようとしているときは空になるため、コードは機能しません。つまりpopupPanel、ブラウザーには表示されません。popupPanelコンポーネントが DOM のどこにも見つからないため、その後の reRender へのリクエストは失敗します。

コンポーネントを ajax で更新するには、ブラウザの DOM に既に存在している必要があります。これが ajax の仕組みです。したがって、解決策は、常にレンダリングされるコンポーネントでポップアップ パネルのコンテンツをラップすることです。

それはさておき、レンダリングが正しく行われたとしても、ポップアップは DOM にのみ配置されます。show()ポップアップを表示するには、実際にポップアップを呼び出す必要があります

しかし、あなたが望むものを達成するためのより良い代替手段は

  1. JavaScript を使用して条件付きでポップアップを表示します。条件が満たされた場合show()、ポップアップに対して関数が呼び出されます。それ以外の場合は、何もしない空の JavaScript 関数が呼び出されます。

    <a4j:commandButton value="Compute Mission" action="#missionHandler.generateMissionFeasability}"
        oncomplete="#{not empty missionHandler.exceptions ? #{rich:component('popupPanel')}.show()" : doNothing()}" render="popupPanel">
    </a4j:commandButton>
    

    doNothing js の場合:

    <script> function doNothing(){} <script/>
    
  2. モーダルパネルからレンダリング条件を取り出す

編集: さらに、ポップアップ コンポーネントの属性は、属性showと同じ EL 条件に基づくことができますoncomplete

于 2013-02-24T21:52:12.603 に答える