是否可以通过放置< 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没有动作侦听器,因此事件不会在那里处理。
最后,我可以通过以编程方式单击每个按键的隐藏按钮来解决此问题,但如果我可以避免这种情况,我会这样做。
提前致谢...
答案 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"));
这样我就不必引入隐藏按钮并将按键事件转换为点击事件。