JSF 2 ajax行为事件侦听器未在Date上触发

时间:2012-01-06 19:20:30

标签: jsf-2

我遇到一个问题,即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,

1 个答案:

答案 0 :(得分:1)

由于日期格式无效而导致转换错误,因此未触发。在每次触发bean侦听器方法之前,都会转换提交的值。添加<h:message> / <h:messages>并在<f:ajax render>中添加其ID。然后你会看到它。

例如String的{​​{1}}值在使用模式2进行解析时无法表示有效的Date对象。

如果你想以这种方式达到功能要求,你真的需要保持dd-MMM-yyyy。作为一个完全不同的替代方案,您可以考虑完全在JavaScript端完成,而无需发送JSF ajax请求。