按钮单击JSF后重置inputText

Bri*_*ten 3 jsf jsf-2

单击JSF中的commandButton后,是否可以重置inputText的值?inputText UIElement提供了ResetValue方法,所以我试过这样的事情:

<h:inputText  id="measurementadd" binding="#{inputTextMeasurement}">
    <f:validateRegex pattern="[a-zA-Z ]*"/>
    <f:ajax event="keyup" render="measurementaddmessage submit" execute="@this"/>
<h:inputText>
<p:commandButton id="submit" action="#{Bean.addMeasurement(inputTextMeasurement.value)}" 
value="submit" update="dataTable measurementadd measurementaddmessage" 
disabled="#{empty inputTextMeasurement.value or facesContext.validationFailed }" >
    <f:ajax event="mouseup" execute="#{inputTextMeasurement.resetValue()}" />
</p:commandButton>  
<h:messages for="measurementadd" id="measurementaddmessage"/>  
Run Code Online (Sandbox Code Playgroud)

但是在单击Button之后,inputTextMeasurement不会重置它的值.

有人知道一个很好的解决方法吗?

我正在寻找没有JS和JAVA的解决方案,因此JSF中的实现会非常酷.

Bal*_*usC 6

你的错误出现在execute属性中:

<f:ajax event="mouseup" execute="#{inputTextMeasurement.resetValue()}" />
Run Code Online (Sandbox Code Playgroud)

execute属性应表示空间分隔的客户端ID集合,以包含在ajax请求的进程/解码中.但是,您在那里指定了一个侦听器方法.

您需要该listener属性:

<f:ajax listener="#{inputTextMeasurement.resetValue()}" />
Run Code Online (Sandbox Code Playgroud)

(我省略了,event因为它默认为click哪个已经是正确的)

有趣的细节是,<f:ajax>同一段代码中的另一个使用exeucte了正确的属性.


具体问题无关,你看过<p:resetInput>吗?这样可以在bean中保存ajax监听器方法.更换整个<f:ajax>

<p:resetInput target="measurementadd" />
Run Code Online (Sandbox Code Playgroud)