JSF:当我按下return / enter键时,inputText可以调用托管bean中的方法

所以我有一个inputText ,它的值挂钩到myBean.text ,我希望如果我单击enter / return键,inputText将调用myBean一个方法来执行某些操作。 谁能帮我?

编辑

 

然后在PostComment bean中

 public void postCommentListener(AjaxBehaviorEvent event){ NewsFeed c = scholar.getModel().getRowData(); postProfileComment(c.getTargetFeedId()); } 

根据你的问题历史,我知道你正在使用JSF 2.0,所以这里有一个JSF 2.0目标答案:使用监听change事件并使用keypress事件在按下回车键时调用它(键码13)。

    

#{bean.listener}应指向类似的方法

 public void listener(AjaxBehaviorEvent event) { // ... } 

最简单的方法是将inputText放在一个表单中,并在其旁边隐藏一个commandButton

例如:

     

更新

如果您使用的是Seam,则可以使用标记。 这使得包含它的commandButton响应了ENTER。

  

如果您不使用Seam,可以尝试使用类似的defaultAction控件之一

或者你可以用一些Javascript来推销自己的; 理想的jQuery。 例如:

 $('input.myText').keypress(function(e) { if (e.which == 13) { $('.myButton').click(); } }); 

实际上您可以使用以下语法:

    

JSF会创建一个事件链,并且在您的f:ajax事件之前将评估您在“onkeypress”下所声明的内容。 因此,您可以返回false来打破事件链。 如果你在f:ajax上使用change事件,它当然会触发你可能不想要的其他更改事件。

你可能会做这样的事情:

   

在你的bean里面:

 public void dosomething(ValueChangeEvent event) { System.out.println("I did something"); } public void fakeaction(ActionEvent event) { System.out.println("I do no nothing"); } 

我决定把它作为一个答案,所以代码会比作为评论内联更清晰,但Damo的解决方案正是对我有用的(所以请求他的回答不是这个;-)。 我有一个带有文本输入字段和搜索图标(放大镜)的表单。 我希望通过单击放大类并在输入文本字段中按Enter键来提交ajax查询。 单击我原始解决方案中的图标有效,但在我的生活中,我无法按下输入文本字段以提交ajax调用(它通过正常机制提交表单)。 这是最终有效的代码。 再次感谢Damo。

 

ps – @BalusC:这是一个罕见的情况,你的答案不是100%适合我所寻找的,但我已经不知道你的其他人有多少。 所以,谢谢你,并享受我从你的愿望清单寄给你的那本书。 如果您想咨询一下,请查看我的个人资料并给我发送电子邮件。

问候,

平价

我有同样的问题,因为我没有足够的声誉喷射,我发布这个作为答案。

在我的情况下,有多个输入需要分别用f:ajax提交。 我需要改进BalusC的解决方案。

你需要添加this.onchange()前面。