Java “PrimeFaces”对话框保留上一个值

Java “PrimeFaces”对话框保留上一个值,java,jsf,dialog,primefaces,Java,Jsf,Dialog,Primefaces,我使用数据表来显示一些记录。用户可以使用名为actionsDialog的对话框添加/更改记录。保存记录之前,将显示一个称为reasonDialog的模式对话框,用户必须为当前操作输入一些原因。在我的逻辑中,我将数据保存到数据库后的原因设置为null 当我重复该操作时,问题出现了。原因包含上一个值。我已经调试了代码,并注意到发生这种情况的原因是分配了InputExtArea的本地值。我怎样才能去掉本地值?我使用的是PrimeFaces3.0、Mojara2.0.4和Tomcat7 我使用dialo

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

当我重复该操作时,问题出现了。原因包含上一个值。我已经调试了代码,并注意到发生这种情况的原因是分配了InputExtArea的本地值。我怎样才能去掉本地值?我使用的是PrimeFaces3.0、Mojara2.0.4和Tomcat7

我使用dialog facelet的原因是:

<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>

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

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

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

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

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



否则,它当然会像关闭前一样显示旧内容。也就是说,通过ajax/JS与完全相同的页面交互,而不是与新页面交互。

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



否则,它当然会像关闭前一样显示旧内容。也就是说,通过ajax/JS与完全相同的页面交互,而不是与新页面交互。

//如果没有任何效果,这是另一种解决方案:

没有什么对我有用…答案或评论。。因此,我必须做以下工作:

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

所以

在对话框中,我有一些
和其他。当对话框关闭、提交后或出现错误时,他们都不再记得以前的值。
这是它对我唯一有效的方式,希望它对我有所帮助

//如果不起作用,这是另一种解决方案:

没有什么对我有用…答案或评论。。因此,我必须做以下工作:

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

所以

在对话框中,我有一些
和其他。当对话框关闭、提交后或出现错误时,他们都不再记得以前的值。

这是它对我唯一有效的方式,希望它对我有所帮助

尝试将id分配给对话框
id=“reasonDialogID”
adn在打开对话框的按钮的
update
属性中添加id。我已将id=“reasonDialogID”添加到对话框,并将其设置为按钮的update属性,但它仍然不起作用。除此之外,原因值设置不正确,它总是空的。您不是在那个按钮单击中调用了一些bean方法吗?将数据设置为
记录bean
recordsBean
的作用域是什么?至少将其设置为视图作用域…单击按钮时,将调用recordsBean的execute方法。recordsBean是会话范围。确保打开
reasonDialog
对话框以完成该按钮的单击?张贴打开对话框的按钮的代码…尝试为对话框分配id
id=“reasonDialogID”
adn在打开对话框的按钮的
update
属性中添加id。我已将id=“reasonDialogID”添加到对话框中,并将其设置为按钮的update属性,但它仍然不起作用。除此之外,原因值设置不正确,它总是空的。您不是在那个按钮单击中调用了一些bean方法吗?将数据设置为
记录bean
recordsBean
的作用域是什么?至少将其设置为视图作用域…单击按钮时,将调用recordsBean的execute方法。recordsBean是会话范围。确保打开
reasonDialog
对话框以完成该按钮的单击?发布打开对话框的按钮的代码…我试过了,但没有成功。我也有同样的问题,但在一个之前有错误的对话框中。我想这就像你的文章所说的。这仍然是Prime 5.3中的一个问题?找到了。在Primefaces中,您可以使用RequestContext.getCurrentInstance().reset(“您的表单id”);要重置表单值,或使用p中的resetValues=“true”:commandButton@TiagoPC我也有同样的问题,但是你的解决方案对我不起作用,你知道为什么吗?试着使用org.omnifaces.eventlistener.ResetInputAjaxActionListener阶段Listener我试过了,但不起作用。我也有同样的问题,但是在一个有先前错误的对话框中。我想这就像你的文章所说的。这仍然是Prime 5.3中的一个问题?找到了。在Primefaces中,您可以使用RequestContext.getCurrentInstance().reset(“您的表单id”);要重置表单值,或使用p中的resetValues=“true”:commandButton@TiagoPC我也有同样的问题,但你的解决方案对我不起作用,你知道为什么吗?试着使用org.omnifaces.eventlistener.ResetInputAjaxActionListener阶段Listener然后最好创建一个新问题,试图找出为什么它对你不起作用,但对许多其他人起作用。现在还不清楚为什么您的解决方案应该是
public void showDialog(){

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