2011-11-21 78 views
1

我在更新primefaces对话框中遇到问题Primefaces对话框没有更新

当前我正在显示带有可编辑格式的某些表单元素的primefaces对话框。 当单击更改链接时,表单中可用的某些输出文本字段的可用链接可用,并且可以在可接受和取消按钮的对话框中以可编辑格式显示输出文本字段。

以下是我正在使用的代码片段,我打电话给监听器,我将值设置为要在可编辑格式的对话框中显示的属性,并且每次使用渲染器更新对话框时属性。

render =对话框的id。

此外,当我试图更新对话框中的内容我收到一些AJAX错误ID找不到。

我也试图把对话框放在一个面板里,即使这不起作用。

  <h:panelGrid columns="5" > 
      <h:outputText value="Overrride State Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="Overrride End Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="New Value"/> 
      <p:calendar value="#{certInquiry.ovrStartDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <p:calendar value="#{certInquiry.ovrEndDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <h:inputText value="#{certInquiry.newVal}"/> 
      </h:panelGrid> 
      <div align="center"> 
      <p:commandButton value="Accept" 
       oncomplete="xyz.hide()" /> <p:spacer width="10" 
       height="5" /> <p:commandButton value="Cancel" 
       onclick="xyz.hide()" type="reset" /></div> 

       </h:form> 
     </p:dialog> 

这里我更新使用呈现的属性对话框,但我不能更新对话框及其仍然显示以前的数据,当我刷新屏幕数据显示正确。

请帮我解决这个问题。

在此先感谢。

回答

3

您尝试使用此代码:

<p:dialog widgetVar="xyz" > 
    <p:panel id="xyzBody"> 
... 
</p:panel> 
</p:dialog> 


<p:commandButton value="Open dialog" oncomplete="xyz.show()" 
    update="xyzBody" 
    actionListener="fillFieldListener" /> 
+0

工程的魅力.... –

1

首先,你应该张贴的entire XHTML代码不仅仅是对话的内容和结束标记...

不过,我想我知道在哪里问题是:您不应该使用对话框的render属性,它的javascript函数showhide绰绰有余。另外,您应该知道you can't update something you haven't rendered,因为在HTML页面(客户端/用户端)中找不到非呈现组件。所有你需要做的是:

<h:form> 
      <p:dialog id="myDialog" header="My Options" widgetVar="xyz" showEffect="fade" hideEffect="fade"> 

      <h:panelGrid columns="5" > 
      <h:outputText value="Overrride State Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="Overrride End Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="New Value"/> 
      <p:calendar value="#{certInquiry.ovrStartDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <p:calendar value="#{certInquiry.ovrEndDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <h:inputText value="#{certInquiry.newVal}"/> 
      </h:panelGrid> 
      <div align="center"> 
      <p:commandButton value="Accept" 
       oncomplete="xyz.hide()" /> <p:spacer width="10" 
       height="5" /> <p:commandButton value="Cancel" 
       onclick="xyz.hide()" type="reset" /></div>  
     </p:dialog> 
<p:commandButton value="Update Dialog" action="#{MyBean.MyMethod}" update="MyDialog" /> 
</h:form> 

所以你的窗体应该在对话框外面,这样更好,更简单;您可以看到UpdateDialog按钮位于对话框之外,并在运行操作方法后更新对话框(但也可能会更新对话框中的面板)。 另外我看到,那些接受和取消按钮只是为了测试,因为他们做同样的事情,没有任何服务器执行...

0

是你的对话框<ui:include>标签?

如果是,则检查页面的源代码或html,并验证该对话框是否仅添加到该页面一次。(你可能有appendToBody设置为true

我有这个问题,对话框被添加到正文multiple times(可能是由于JSF生命周期)。这会导致意外的结果,如对话框没有得到更新。

我解决它由<ui:include>外面取出对话,也可以有条件地呈现你的<ui:include> content

PS:我相信你已经跟随其他答案喜欢包装容器内的对话内容。 而@spauny提到你应该发布所有相关的xhtml代码。

0

我看到一个关闭,但不是整个图片,虽然我一直在这条路上,并为你解答。

如果您在对话框外部有表单,请尝试将其排列在对话框中。例如,

<p:dialog ...> 
    <h:form> 
     ...contents... 
    </h:form> 
</p:dialog>