0

是否可以通过将 <f:ajax> 标记放在 <h:inputText> 中来触发 Web 流转换,以便在每次按键时发送请求?

我已经尝试过了,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 没有动作侦听器,因此没有在那里处理事件。

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

提前致谢...

4

1 回答 1

2

我发现这篇关于如何在 h:selectOneMenu 中触发值更改转换的帖子,该解决方案效果很好,即使对于我的用例也是如此。

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

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

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

于 2013-09-28T05:44:16.437 回答