通过单击JSF中的按钮将输入文本值传递到服务器端

时间:2014-03-07 07:57:04

标签: ajax jsf richfaces ajax4jsf jsf-1.1

我有一个带有搜索值的文本框,我想在点击按钮时将此字符串发送到服务器端。不是通过ajax调用提交表单。

我在输入标记本身添加了一个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方式,但我在服务器端得到“未定义”。

3 个答案:

答案 0 :(得分:3)

为什么不使用a4j:commandButton代替h:commandButton?它将执行ajax请求并呈现您想要的内容。没有表格提交。喜欢你需要的东西。

答案 1 :(得分:0)

默认情况下,

h:commandButton会在点击时提交表单。因此无需使用a4j:jsFunction或以任何其他方式专门发送。你可以完全删除你的js函数,除非你还有别的事情要做。如果要测试添加动作方法并在createBookingForm bean中打印searchText变量的值。

希望这会有所帮助!!

答案 2 :(得分: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>