PrimeFaces对话框保留以前的值

时间:2012-08-13 07:44:53

标签: java jsf dialog primefaces

我使用dataTable来显示一些记录。用户可以使用名为actionsDialog的对话框添加/更改记录。在保存记录之前,会显示一个名为reasonDialog的模态对话框,用户必须输入当前操作的某些原因。在我的逻辑中,我将数据保存到数据库后设置为null。

重复操作时出现问题。原因包含先前的值。我调试了代码并注意到这是因为原因被分配了inputTextarea的本地值。我怎样才能摆脱当地的价值?我使用的是PrimeFaces 3.0,Mojara 2.0.4,Tomcat 7。

我的理由对话框是:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.prime.com.tr/ui">  
    <p:dialog header="#{label.reason}" widgetVar="reasonDialog"
        showEffect="fade" hideEffect="explode" modal="true" dynamic="true">        
        <h:panelGrid columns="2">
            <p:inputTextarea rows="5" cols="40" autoResize="false"
                value="#{recordsBean.reason}" maxLength="1024" />
            <f:facet name="footer">
                <p:outputPanel layout="block">
                <p:commandButton value="ok" update="genericRecords msgs"
                    action="#{recordsBean.execute}"
                    oncomplete="reasonDialog.hide();actionsDialog.hide()" />
                </p:outputPanel>
            </f:facet>
        </h:panelGrid>
    </p:dialog>
</ui:composition>

操作对话框如下所示:

<p:dialog id="actionsDialog" widgetVar="actionsDialog" dynamic="true"
    resizable="false" height="600" showEffect="fade" hideEffect="fade" modal="true">
<ui:include src="/WEB-INF/flows/genericRecord.xhtml"/>
<f:facet name="footer">  
        <p:outputPanel layout="block">
    <p:commandButton value="save" onclick="reasonDialog.show()" />
    <p:commandButton value="cancel" immediate="true" 
                oncomplete="actionsDialog.hide()" />
    </p:outputPanel>
</f:facet>
</p:dialog>

3 个答案:

答案 0 :(得分:9)

在显示对话框之前,您需要更新/刷新对话框的内容。在update属性中引用其(相对)客户端ID,并将show()onclick移至oncomplete,以便在更新后进行。

<p:commandButton value="save" update="reasonDialog" oncomplete="reasonDialog.show()" />

否则它当然会显示旧内容,因为它在关闭之前就已存在。你是通过ajax / JS与完全相同的页面进行交互,而不是新页面。

答案 1 :(得分:1)

尝试在p:commandButton中添加ajax =“false”属性;见样本

   <p:commandButton value="ok" update="genericRecords msgs"
                action="#{recordsBean.execute}" ajax="false"
                oncomplete="reasonDialog.hide();actionsDialog.hide()" />

答案 2 :(得分:0)

//如果没有任何效果,这是替代解决方案:

对我没有任何帮助...答案或评论。所以我必须执行以下操作:

我使用ResetInputs来重置对话框中的表单,并使用一种方法从我的bean中打开它。

所以

<p:commandButton value="Show" actionListener="#{myBean.showDialog()}" update=":myForm">
            <p:resetInput target=":myForm"/>
</p:commandButton>

然后在我的bean中执行此方法,将打开对话框(使用对话框的widgetVar)并再次初始化对象,因此,每次打开对话框时,所有<p:inputText>中的值(或其他值) )将始终为空白/空。

public void showDialog(){

    car = new Car();
    RequestContext context = RequestContext.getCurrentInstance();
    context.execute("PF('wvDialog').show();");
    //added widgetVar to myDialog called wvDialog 
} 

在对话框中,我有一些<p:inputText><p:selectOneMenu><p:calendar>等。当对话框关闭,提交后或出现错误时,所有这些对象都不会再次记住以前的值。 这是它对我有用的唯一方法,希望对您有所帮助!