【发布时间】:2014-04-10 06:33:43
【问题描述】:
我有一个带有搜索值的文本框,我想通过单击按钮将此字符串发送到服务器端。不是通过表单提交,而是通过 ajax 调用。
我在输入标签本身中添加了一个 actionListener,它在 blur 中调用。但我真正想要的是用户点击按钮触发搜索功能。
我从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 的方式进行操作,但我在服务器端得到“未定义”。
【问题讨论】:
-
你不需要
a4j:jsFunction来设置searchText的值(h:inputText就足够了)。您可以直接在您的h:commandButton中调用操作。您的代码不起作用,因为您将错误的值传递给 jsFunction。您需要将onclick属性更改为onclick="setParameterAndRerender('#{createBookingForm.searchText}');"。您的代码设计不佳,请尝试以其他方式进行。 -
我不能直接调用 commandButton 中的操作,因为那样会提交整个表单。我不想那样。我试过
onclick="setParameterAndRerender('#{createBookingForm.searchText}');,但我在服务器端得到“未定义”。 -
使用
a4j:commandButton。它可以在不提交表单的情况下执行一些操作。
标签: ajax jsf richfaces ajax4jsf jsf-1.1