操作后 Primefaces 在对话框中刷新日历

Primefaces refresh calendar on dialog after action

我在一个对话框中有一个输入日历(现在是但与 相同)。问题是当我执行操作时,我调用 bean 来保存此日历中引用的对象,然后,当我为此输入创建一个新对象时,对话框不会用这个新 "null value" 刷新。他们显然在旧对象的页面上保持状态,但在后面,在 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)}"
                />

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