2014-03-07 45 views
-1

我有一個文本框,它接受一個搜索值,並且我想通過點擊一個按鈕將這個字符串發送到服務器端。不是通過表單提交,通過ajax調用。在JSF中點擊一個按鈕將輸入文本的值傳遞給服務器端

我已經添加了一個actionListener到輸入標籤本身,這被稱爲模糊。但我真正想要的是用戶點擊按鈕來觸發搜索功能。

我有一個想法從this問題,並實現了這種方式:在服務器端收到

<h:inputText id="likeMaterial" value="#{createBookingForm.searchText}"></h:inputText> 
<a4j:jsFunction name="setParameterAndRerender" actionListener="{bean.searchMaterials}" reRender="searchResult"> 
    <a4j:actionparam name="param1" assignTo="#{createBookingForm.searchText}"/> 
</a4j:jsFunction> 
<h:commandButton value="Search" onclick="setParameterAndRerender('mySearchText');return false;"></h:commandButton> 

值當然,「mySearchText」。我如何通過用戶輸入的內容?或者如何在調用按鈕的動作偵聽器之前綁定#{createBookingForm.searchText}

我打開任何其他的方法來。儘管我有限制:我正致力於增強使用JSF 1.1構建的遺留應用程序。我無法升級,至少不是沒有戰鬥!

編輯:我試過這樣做this的方式,但我得到「未定義」在服務器端。

+0

你不需要'A4J:jsFunction'設置SEARCHTEXT的值('H:inputText'就足夠了)。你可以直接在你的'h:commandButton'中調用action。您的代碼不起作用,因爲您將錯誤的值傳遞給jsFunction。你需要改變'onclick'屬性'的onclick = 「setParameterAndRerender( '#{} createBookingForm.searchText');」'。你的代碼設計不好,嘗試用其他方式做。 –

+0

我不能直接調用的commandButton的行動,因爲這將提交整個表單。我不想那樣。我試圖'的onclick =「setParameterAndRerender(‘#{} createBookingForm.searchText’);'但我得到‘服務器端 – insanity

+0

使用'A4J未定義’:。commandButton'它可以做無形體一些動作提交 –

回答

3

爲什麼不使用a4j:commandButton而不是h:commandButton?它會執行一個Ajax請求並渲染你想要的東西。不會提交表單。 Loks喜歡你所需要的東西。

+0

是的,這幫助。我已經添加了整個解決方案的另一種答案。爲更好的格式。 – insanity

0

h:commandButton默認情況下在單擊時提交表單。所以不需要特別使用a4j:jsFunction或以任何其他方式發送。除非你有其他事情要做,否則你可以完全移除你的js函數。如果要測試添加一個操作方法並在createBookingForm bean中輸出searchText variale的值。

希望這有助於!

+0

我。不想提交表單。正如我的問題,提到IV「不是由一個表單提交,通過Ajax調用。」 – insanity

0

這是整個解決方案

<h:inputText id="likeMaterial" value="#{createBookingForm.searchText}"></h:inputText> 
<a4j:commandButton reRender="searchResult" actionListener="#{createBookingForm.searchMaterials}"> 
    <a4j:actionparam name="param1" noEscape="true" value="document.getElementById('likeMaterial').value" assignTo="#{createBookingForm.searchText}" /> 
</a4j:commandButton> 
相關問題