操作后 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>
我在一个对话框中有一个输入日历(现在是但与 相同)。问题是当我执行操作时,我调用 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>