我遇到一个问题,即ajax行为事件没有立即被触发,因为文本是在字段中输入的。
如果字段是字符串没问题,但我使用的是日期。
XHTML:
<h:outputLabel value="Date of Birth:" />
<h:inputText id="searchDOB" value="#{search.dob}" required="true">
<f:ajax event="keyup" listener="#{search.addHyphensToDOB}" render=":output" />
<f:convertDateTime pattern="dd-MMM-yyyy" />
豆:
Date dob;
public void addHyphensToDOB(AjaxBehaviorEvent abe) {
System.out.println("addHyphen");
}
只有在输入以下内容后才会触发事件:
22-JAN -
在第二个连字符之后发出任何数字,但不是之前。
一种解决方案可能是将Date类型更改为String,然后在不使用转换器的情况下进行格式化,但我希望保留Date类型。
任何建议,谢谢。
Eclipse 3.7,tomcat 7,jsf2.1,
答案 0 :(得分:1)
由于日期格式无效而导致转换错误,因此未触发。在每次触发bean侦听器方法之前,都会转换提交的值。添加<h:message>
/ <h:messages>
并在<f:ajax render>
中添加其ID。然后你会看到它。
例如String
的{{1}}值在使用模式2
进行解析时无法表示有效的Date
对象。
如果你想以这种方式达到功能要求,你真的需要保持dd-MMM-yyyy
。作为一个完全不同的替代方案,您可以考虑完全在JavaScript端完成,而无需发送JSF ajax请求。