1

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

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

我的原因对话框 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>
4

3 回答 3

9

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

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

否则,它当然仍会显示关闭前的旧内容。您就是通过 ajax/JS 与完全相同的页面进行交互,而不是一个新页面左右。

于 2012-08-13T10:16:51.693 回答
1

尝试在您的 p:commandButton 中添加 ajax="false" 属性;见样品

   <p:commandButton value="ok" update="genericRecords msgs"
                action="#{recordsBean.execute}" ajax="false"
                oncomplete="reasonDialog.hide();actionsDialog.hide()" />
于 2012-08-13T08:54:48.123 回答
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>

于 2019-01-23T18:20:58.700 回答