我目前使用纯javascript的onkeypress
事件实现了此功能。
有一个textarea字段。一旦用户键入某些内容,实现的功能就会向他/她显示剩余的字符数。
现在客户要求在JSF中使用验证器做同样的事情吗?没有Javascript。
我很困惑,我将如何使用JSF在每个keypress事件上调用验证方法?
请提出建议?
修改 我不确定这个,
<f:ajax event="keypress" listener="#{helloBean.validateLength}">
<h:inputTextarea value="#{helloBean.name}"></h:inputTextarea>
</f:ajax>
用听力法,
public void validateLength(AjaxBehaviorEvent event) {
// stuff
}
但javscript被禁用了,这会有用吗?
答案 0 :(得分:2)
让您的JavaScript显示剩余的字符。这确实不是一个真正的验证器,但它只是一个有用的指标,基于JSF的解决方案将非常昂贵。
要在客户端强制textarea的maxlength,请在组件上使用新的HTML5 maxlength
属性。
<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputTextarea ... a:maxlength="1000" />
提示:您可以在“剩余字符”脚本中使用它,只需让它从HTML DOM中提取maxlength即可使其更通用/可重用。
然后,要验证服务器端的实际最大长度,只需使用JSF的<f:validateLength>
。
<h:inputTextarea ...>
<f:validateLength maximum="1000" />
</h:inputTextarea>
或BV的@Size
。
@Size(max=1000)
private String text;
无论哪种方式,只需将<f:ajax event="keyup">
嵌套在textarea中,就可以在keyup事件期间触发服务器端验证。
<h:inputTextarea id="text" ...>
<f:ajax event="keyup" render="m_text" />
</h:inputTextarea>
<h:message id="m_text" for="text" />
但是如上所述,这真的很贵。即使您使用<f:ajax delay>
,我仍然不建议这样做,只是将其删除。它没有真正的好处,因为maxlength
已经限制了客户端的最大长度。
总而言之,我希望你学习使用普通的验证器,以防你想要执行验证,而不是试图滥用动作(监听器)方法。另请参阅JSF 2.0 validation in actionListener or action method。