在JSF输入字段上使用f:ajax触发Spring Web Flow视图转换

时间:2013-09-27 19:25:40

标签: ajax spring jsf transition spring-webflow

是否可以通过放置< f:ajax>来触发网络流转换标签内的< h:inputText>每次按键发送请求?

我已经尝试了这个,并且浏览器发送了ajax请求,由应用程序接收并由JSF处理,但Web Flow没有观察到该事件。

<!-- does not trigger transition -->
<h:inputText id="search" value="#{friendsForm.searchUsername}">
   <f:ajax listener="search" 
           execute="@this" 
           render="users" 
           event="keypress"/>
</h:inputText>

<!-- does trigger transition -->
<h:commandButton value="search" action="search">
   <f:ajax listener="search" execute="search" render="users"/>
</h:commandButton>

使用commandButton执行相同操作时,它按预期工作。查看源代码,可以看到按钮的基类UICommand调用其默认的ActionListener,最终触发转换。似乎inputText没有动作侦听器,因此事件不会在那里处理。

最后,我可以通过以编程方式单击每个按键的隐藏按钮来解决此问题,但如果我可以避免这种情况,我会这样做。

提前致谢...

1 个答案:

答案 0 :(得分:2)

我发现this post about how to trigger a transition on value change in h:selectOneMenu并且解决方案效果很好,即使是我的用例。

我在f:ajax上定义了listener属性,指向一个spring bean的方法,该方法依次获取RequestControlContext以处理触发转换的新事件。

RequestContext requestContext = RequestContextHolder.getRequestContext();
RequestControlContext rec = (RequestControlContext) requestContext;
rec.handleEvent(new Event(this, "search"));  

这样我就不必引入隐藏按钮并将按键事件转换为点击事件。