我有一个带有搜索值的文本框,我想在点击按钮时将此字符串发送到服务器端。不是通过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方式,但我在服务器端得到“未定义”。
答案 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>