【问题标题】:Reset inputText after Button Click with JSF使用 JSF 单击按钮后重置 inputText
【发布时间】:2013-11-14 16:43:52
【问题描述】:

在 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"/>  

但点击按钮后 inputTextMeasurement 并没有重置它的值。

有人知道解决这个问题的好方法吗?

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

【问题讨论】:

标签: jsf jsf-2


【解决方案1】:

您的错误在execute 属性中:

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

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

您需要 listener 属性来代替:

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

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

有趣的细节是同一段代码中的另一个&lt;f:ajax&gt; 以正确的方式使用了exeucte 属性。


与具体问题无关,你看过&lt;p:resetInput&gt;吗?这在 bean 中保存了一个 ajax 侦听器方法。将整个&lt;f:ajax&gt; 替换为

<p:resetInput target="measurementadd" />

【讨论】:

  • &lt;f:ajax listener= 对我不起作用。我正在使用 PrimeFaces 5.3 .... 与问题相同,我正在使用 Binding 值将输入数据发送到后端 bean。但是,发送后,我想删除 InputText 上的值。路怎么样?
  • &lt;p:inputText id="newOptionSymbol" binding="#{optionSymbol}" required="false"&gt;&lt;/p:inputText&gt; &lt;p:inputText id="newOptionText" binding="#{optionText}" &gt;&lt;/p:inputText&gt; &lt;p:commandButton value="Ekle" icon="fa fa-plus color-white" action="#{analysisBean.addOptionToQuestion(analysisBean.question, optionSymbol.value, optionText.value)}" ajax="true" update=":questionEditForm" &gt; &lt;f:ajax listener="#{optionSymbol.resetValue()}" /&gt; &lt;/p:commandButton&gt; 有错误吗?因为它应该工作......
【解决方案2】:

我们为什么不直接使用

<input type="Reset"/>

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

【讨论】:

【解决方案3】:

我已经解决了我的问题如下

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

发回 bean UIInput 组件。在 back bean 中获取和重置值。

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

【讨论】:

    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 2014-08-19
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多