【问题标题】:Not able to close modal pop up window无法关闭模态弹出窗口
【发布时间】:2015-10-09 09:03:16
【问题描述】:

我的方案是在模式弹出窗口上一一显示列表中的消息。列表将由用户定义的对象组成,该对象具有三个字段,即 Messages、BgColor 和 TextColor。模态弹出窗口将有一个“NEXT”按钮,单击此按钮将在弹出窗口中显示消息,消息将以各自的背景颜色和文本颜色显示。

Main.xhtml

    <rich:popupPanel id="popupOne" modal="true" rendered="#{demoBean.isTrue}">
    <a4j:outputPanel id="popupTwo" >
      <ui:include id="PackStation_OrderNote_Popup" src="/MyXhtml.xhtml">
       <ui:param id="backcolor" name="backcolor" value="#{demoBean.bgColor}"/>
       <ui:param id="textcolor" name="textcolor" value="#{demoBean.textColor}"/>
      </ui:include>
    </a4j:outputPanel>
    </rich:popupPanel>

MyXhtml.xhtml

    <a4j:outputPanel id="panelone" >
    <h:outputText id="errorMsg" name="errorMsg"  class="pop_outputText" value="#{demoBean.messages}" />
                    <a4j:commandButton id ="btnOne" 
                                       action="#{demoBean.continueMsgSequenece}" 
                                       value="next" 
                                       reRender="popupOne"  
                                       oncomplete="closePOPUP('#{demoBean.messages}');">    
                    </a4j:commandButton>
    </a4j:outputPanel>

Javascript 函数

    function closePOPUP(msg)
                {
                     if(msg==""){
                      //code to close modal popup
                      UI8Layout.doDialogCloseById('popupOne');
                    }
                }

如果我将“popupOne”放在 myXhtml.xhtml 的 a4j:commandButton 的渲染属性中。当我在模态弹出窗口中按预期单击“下一步”按钮时,背景颜色和文本颜色会发生变化,并且消息会出现,但是在单击“下一个按钮”时,消息结束时模态弹出窗口不会关闭。

如果我将“popupTwo”放在 myXhtml.xhtml 的 a4j:commandButton 的渲染属性中。背景颜色和文本颜色在模态弹出窗口中没有变化,但是在单击“下一个按钮”时,消息结束时模态弹出窗口会关闭。

我需要显示带有背景颜色和文本颜色的消息,并且模式弹出窗口应该在消息结束时关闭。

消息按预期顺序发送。

我的实现是错误的还是我需要处理一些事情?

注意:我的 Javascript 函数在第一种情况下不会关闭模式弹出窗口,但在消息结束时会在第二种情况下关闭模式弹出窗口。

【问题讨论】:

  • 我读过一些内容,其中 a4j:commandButton 和 oncomplete 在导航时或当 a4j:commandButton 放置在 Ajax 面板内时显示了一些奇怪的行为。任何人都可以通过一些了解它吗?以及 a4j:commandButton 是如何工作的?

标签: jsf jsf-2 richfaces ajax4jsf


【解决方案1】:

在 RF 4 中重新渲染的正确属性是 render。并且将 ids 放入“rendered”属性将无济于事。

由于您想重新渲染整个面板而不仅仅是消息,您可以通过这种方式控制面板的可见性:

<rich:popupPanel show="#{not empty demoBean.messages}" … >

【讨论】:

  • 你的意思是 a4j:commandbutton 的 reRender 属性应该替换为 render 吗?但它仍然没有醒来。
  • 我们正在使用 JSF 2 和 Rich Faces 3
  • 您的代码不建议这样做,rich:popupPanel 不是 RichFaces 3 中的组件。
  • 实际上我们正在使用我们的自定义框架。我不能透露实际代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多