使用JSF

时间:2015-05-28 03:10:55

标签: validation jsf-2 textarea maxlength

我目前使用纯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被禁用了,这会有用吗?

1 个答案:

答案 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