0

我在一种形式中有两个 primefaces 面板。

<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 属性上调用面板关闭函数。

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

我在backing bean中设置成功回调参数如下;

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

和javascript函数handleComplete如下;

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

问题是这两个面板中只有一个可以关闭。我的目的是相继关闭两者。但它不起作用。可能是因为 javascript 中的第一次关闭执行触发了一个 ajax 请求,在调用第二个面板关闭时还没有完成 ajax 请求?任何想法的家伙。非常感激您的帮忙。

4

2 回答 2

1
  1. 将两个面板的可见性设置为“#{createProduct.showPanel}”

  2. 在 createProduct bean 中将 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 回答