我有一个JSF ajax keyup事件链接到备用bean中的事件列表器。
JSF文件中的代码如下所示。
<h:inputText id="txtDescription" value="#{institutionController.current.description}" disabled="#{institutionController.modifyControlDisable}" > <f:ajax event="keyup" listener="#{institutionController.changeDetailsEvent}" /> </h:inputText>
支持bean中的代码如下。
public void changeDetailsEvent(AjaxBehaviorEvent event) { }
我想根据按键来实现不同的逻辑,如下面的伪代码所示。
public void changeDetailsEvent(AjaxBehaviorEvent event) { If (event.key = Key.enter) { do something; } else if (event.key = Key.Escape) { so something else; } else { do nothing; } }
有人可以告诉我在备用bean中是如何完成的吗?
在AjaxBehaviorEvent不包含JavaScript的任何信息event对象。您需要自己传递期望的信息。这可以通过一个隐藏的输入字段来实现,该字段的值将由JavaScript预填充。例如,
AjaxBehaviorEvent
event
<h:inputText value="#{bean.input}" onkeyup="document.getElementById('#{keyCode.clientId}').value=event.keyCode"> <f:ajax event="keyup" execute="@this keyCode" listener="#{bean.listener}" /> </h:inputText> <h:inputHidden id="keyCode" binding="#{keyCode}" value="#{bean.keyCode}" />
(请注意,其中id包含了隐藏字段的,execute以便它在ajax请求中提交,请注意,binding用来动态获取生成的客户ID document.getElementById()以便设置键值,您也可以对客户端ID(如果已修复)进行硬编码)
id
execute
binding
document.getElementById()
与
private String input; private int keyCode; public void listener() { switch (keyCode) { case 13: // Enter key was pressed. break; case 27: // Escape key was pressed. break; default: // Other key was pressed. break; } }
您可以keyCode在Mozilla DOM参考中找到所有有效值的概述。
keyCode