2013-11-14 103 views
3

在JSF中單擊commandButton之後是否可以重置inputText的值?該inputText的的UIElement提供ResetValue所以我想是這樣的方法:在按鈕單擊JSF後重置inputText

<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中的實現將非常酷。

+0

是綁定正確的'binding =「#{inputTextMeasurement}'而不是'binding =」#{inputTextMeasurement.value}'? – Kuba

+0

@Kuba:是的,它絕對正確。另見http://stackoverflow.com/questions/12506679/what-is-component-binding-in-jsf-when-it-is-preferred-to-be-used/ – BalusC

+0

只是檢查:-) – Kuba

回答

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監聽器方法。與

<p:resetInput target="measurementadd" /> 
+0

' efirat

0

更換整個<f:ajax>爲什麼不,我們只是使用

<input type="Reset"/> 

這一個是對我工作得很好! ???

+0

因爲這將整個窗體重置爲默認值,這是不是在這裏問的。如果你需要,請前往http://stackoverflow.com/ q/20077117 – BalusC

0

我已經解決了我的問題如下

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

發回豆UIInput組件。獲取並重置後端bean的值。

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