我使用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>
答案 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>
等。当对话框关闭,提交后或出现错误时,所有这些对象都不会再次记住以前的值。
这是它对我有用的唯一方法,希望对您有所帮助!