首页 > 解决方案 > Primefaces 在操作后刷新对话框上的日历

问题描述

我在一个对话框中有一个输入日历(现在是,但同样发生)。问题是当我执行操作时,我调用 bean 来保存此日历中引用的对象,然后,当我为此输入创建一个新对象时,对话框不会用这个新的“空值”刷新。他们显然保持旧对象页面上的状态,但在后面,在 bean 上,对象是新对象。

我不知道我做错了什么,如果有人可以帮助我,我会很高兴。

这是我输入的对话框的一部分

                    <div>
                        <p:outputLabel id="calendarLabel"
                                       value="beginDate"
                                       for="dateInput"/>
                        <ii:calendar id="dateInput"
                                     pattern="yyyy-mm-dd"
                                     value="#{bean.entity.beginDate}"
                                     immediate="true"
                                     style="text-align: right !important;">
                            <p:ajax event="change" process="@this" update="@this"/>
                        </ii:calendar>
                        <p:message id="beginDateMessage"
                                   for="dateInput"/>
                    </div>

这是我调用保存在日历上引用的对象并创建一个新对象的操作的按钮(在调用方法的末尾实体 = new Entity())

               <p:commandButton id="CmdYes"
                                 styleClass="ui-confirmdialog-yes"
                                 icon="fa fa-check"
                                 value="Confirm"
                                 process="@form @form:dialog"
                                 update="@form @form:dialog"
                                 immediate="true"
                                 action="#{bean.persistEntity()}"
                                 onstart="PF('pageBlocker').show();"
                                 onsuccess="PF('dialog').hide();PF('pageBlocker').hide();">
                </p:commandButton>

我已经尝试了所有方法,最接近的解决方案是使用 onclick="calendarWidget.setDate(null)" 创建一个按钮。有了这个,我可以单击按钮并清除日历输入,我可以将其放入 JS 并在操作后调用单击。但这在我看来是一个糟糕的解决方案。

有人可以帮我理解我做错了什么吗?

更新

这是调用对话框的操作:

                <p:menuitem id="actionSuspend"
                            value="Suspend"
                            process="@form" update="@form" 
                            immediate="true"
                            onstart="PF('pageBlocker').show()"

                            oncomplete="PF('dialog').show();PF('pageBlocker').hide()"
                            actionListener="#{bean.doAction('action', item)}"
                            rendered="#{bean.canDoAction('action', item)}"
                />

标签: javaprimefaces

解决方案


@MatteoZanini 确实解决了这个问题:

resetInput 对我有用,我在打开对话框的按钮上调用它,然后重置所有内容。

               <p:menuitem id="actionSuspend"
                            value="Suspend"
                            process="@form" update="@form" 
                            immediate="true"
                            onstart="PF('pageBlocker').show()"
                            oncomplete="PF('dialog').show();PF('pageBlocker').hide()"
                            actionListener="#{bean.doAction('action', item)}"
                            rendered="#{bean.canDoAction('action', item)}">
               <p:resetInput target="@form:dialog"/>
                        </p:menuitem>

推荐阅读