2012-01-06 99 views
0

我遇到了问题,因为在字段中键入文本时没有立即触发ajax行为事件。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" /> 

豆:

22-JAN-

Date dob; 

public void addHyphensToDOB(AjaxBehaviorEvent abe) { 
    System.out.println("addHyphen"); 
} 

该事件被键入以下后才解雇

并在第二个连字符之后的任何数字上发射,但不是之前。

一种解决方案可能是将日期类型更改为字符串,然后格式化而不使用转换器,但我想保留日期类型。

任何建议,谢谢。

的Eclipse 3.7,Tomcat的7,jsf2.1,

回答

1

它没有被解雇,因为发生因无效的日期格式转换错误。提交的值每次在bean侦听器方法被击中之前都会被转换。添加<h:message>/<h:messages>并将其ID包含在<f:ajax render>中。你会看到它。

A String例如2的值在用模式dd-MMM-yyyy解析时可能不可能代表有效的Date对象。

如果你想以这种方式达到功能要求,你真的需要保留一个String。作为一个完全不同的选择,您可以考虑完全在JavaScript端完成而不发送JSF ajax请求。

+0

我认为客户端验证是最好的。谢谢你的帮助。 – wwhite 2012-01-09 20:23:36

+0

哦,它仅仅用于验证吗?您也可以在更改或模糊时执行它,而不是在键上。 – BalusC 2012-01-09 20:29:19

+0

我用'onkeyup =“addHyphens()”',谢谢。 – wwhite 2012-04-25 21:04:25

相关问题