按钮单击JSF后重置inputText

时间:2013-11-14 16:43:53

标签: 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"/>  

但是点击Button后,inputTextMeasurement不会重置它的值。

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

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

3 个答案:

答案 0 :(得分:5)

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

<f:ajax event="mouseup" execute="#{inputTextMeasurement.resetValue()}" />

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

您需要listener属性:

<f:ajax listener="#{inputTextMeasurement.resetValue()}" />

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

有趣的细节是,同一段代码中的其他<f:ajax>以正确的方式使用exeucte属性。


对具体问题

无关,您看过<p:resetInput>了吗?这样可以在bean中保存一个ajax监听器方法。将整个<f:ajax>替换为

<p:resetInput target="measurementadd" />

答案 1 :(得分:0)

为什么我们不使用

<input type="Reset"/>

这个对我来说很好用! ???

答案 2 :(得分:0)

我已经解决了我的问题,如下所示

<p:commandButton id="submit" action="#{Bean.addMeasurement(inputTextMeasurement)}">

发回bean UIInput组件。获取并重置后bean中的值。

public void addMeasurement(UIInput    
   String msr = (String) inputTextMeasurement.getValue()
   inputTextMeasurement.resetValue();
}