0

1 つのフォームに 2 つのプライムフェイス パネルがあります。

<p:panel id="pnlOne" widgetVar="pnlOne"> <p:ajax event="close" listener="#{createProduct.cancelAddProductCategory}"/></p:panel>'
<p:panel id=pnlTwo" widgetVar="pnlTwo"> <p:ajax event="close" listener="#{createProduct.cancelAddBrand}"/></p:panel>

oncomplete 属性でパネルを閉じる関数を呼び出す別の commandButton があります。

<p:commandButton id="btnadd" value="#{bundle.LabelSave}" update=":forminput :formcollector" 
action="#{createProduct.createNew}" oncomplete="handleComplete(xhr, status, args)">

次のように、バッキング Bean に成功コールバック パラメータを設定します。

RequestContext.getCurrentInstance().addCallbackParam("success", true);

そして、JavaScript 関数 handleComplete は以下のように;

function handleComplete(xhr, status, args) {  
if(args.success) {  
    pnlOne.close();
    pnlTwo.close();
    } } 

問題は、これら 2 つのパネルのうちの 1 つだけを閉じることができることです。私の目的は、両方を連続して閉じることです。しかし、うまくいきません。javascript での最初のクローズ実行が ajax 要求をトリガーし、2 番目のパネルのクローズが呼び出されるまでに ajax 要求を完了していない可能性がありますか? どんなアイデアでも。よろしくお願いいたします。

4

2 に答える 2

1
  1. 両方のパネルの可視性を「#{createProduct.showPanel}」に設定します

  2. createProductBeanでshowPanelをtrueまたはfalseに更新します。

  3. commandButtonについては、両方のパネルを更新してください。

于 2012-04-09T11:22:08.043 に答える
0

これを解決する方法です。実際には、パネルがユーザーによって表示されず、その非表示のパネルに対して close メソッドを呼び出すと、上記のシナリオが作成されます。だから私はちょうど追加します。

Bean のメソッドが成功し、両方のパネルが表示される場合:

RequestContext.getCurrentInstance().addCallbackParam("success", true);    
if (pnl1 is visible) {
    RequestContext.getCurrentInstance().addCallbackParam("pnlone", true); 
}
if (pnl2 is visible) {
    RequestContext.getCurrentInstance().addCallbackParam("pnltwo", true); 
}

JavaScript:

function handleComplete(xhr, status, args) {
  if(args.success) {  
      if (args.pnlone) {  
          pnlOne.close(); 
      }
      if (args.pnltwo) {  
          pnlTwo.close();
      } 
  } 
}  
于 2012-04-10T02:34:07.757 に答える