如何在JSF Primefaces中重置inputText字段

如何在JSF Primefaces中重置inputText字段,jsf,primefaces,Jsf,Primefaces,下面对话框中的InputText字段保留以前的值,即使我在调用show()之前将其设置为空。只有在第一次调用show()时,inputText字段才会显示为空。我的bean是会话范围的 <p:dialog id="dlgId" widgetVar="dlgVar" dynamic="true"> <h:form> <h:panelGrid columns="1"> <h:outputLabel for="nametext" val

下面对话框中的InputText字段保留以前的值,即使我在调用show()之前将其设置为空。只有在第一次调用show()时,inputText字段才会显示为空。我的bean是会话范围的

<p:dialog id="dlgId" widgetVar="dlgVar" dynamic="true">
<h:form>
    <h:panelGrid columns="1"> 
       <h:outputLabel for="nametext" value="Name" />
       <p:inputText id="nametext" value="#{myBean.name}" />
    </h:panelGrid>

    <p:commandButton value="Save" actionListener="#{myBean.saveAction}" />
</h:form>

如何让InputText字段显示调用show()之前设置的值,而不是用户以前输入的值?

问题是:您需要更新表单。要做到这一点,您可以使用以下解决方案之一

解决方案1:从xhtml更新它

<h:form id="form">
    <h:panelGrid columns="1"> 
       <h:outputLabel for="nametext" value="Name" />
       <p:inputText id="nametext" value="#{myBean.name}" />
    </h:panelGrid>

    <p:commandButton value="Save" actionListener="#{myBean.saveAction}" update=":form" />
</h:form>
你也可以阅读这篇文章

解决方案3:使用Ajax事件更新它

您还可以添加一个ajax事件

<p:commandButton value="Save" type="button" >
    <p:ajax event="click" listener="#{myBean.saveAction}" update=":form"/>
</p:commandButton>


我尝试了您的上述两个建议,但仍然不起作用。让我进一步解释:第一次显示的对话框:InputText字段为空,用户进入“Mr Smith”第二次显示的对话框:InputText字段为“Mr Smith”而非空,这意味着用户在输入名称之前必须手动清除“Mr Smith”。您必须在何处更新对话框1。当您打开对话框或2时。当你点击saveAction?!?回答得好!刚刚包装了所有可能的替代方案。@YagamiLight感谢您的帮助-我使用了您的第一个解决方案,现在它正在工作。我在另一个对话框中遇到了同样的问题,我想在显示该对话框之前设置一个预定义的值,而不是在操作侦听器中。这能做到吗?i、 e.在调用show()之前调用name=“some value”…@amah请将其作为一个答案并发布一个新问题,我将查看并尝试给出答案
<h:form id="form">
...
</h:form>
public void saveAction() {
... 
name = ""; 
RequestContext.getCurrentInstance().update(":form");
}
<p:commandButton value="Save" type="button" >
    <p:ajax event="click" listener="#{myBean.saveAction}" update=":form"/>
</p:commandButton>