JSF 验证是客户端还是服务器端?

Posted

技术标签:

【中文标题】JSF 验证是客户端还是服务器端?【英文标题】:Is JSF validation client-side or server-side? 【发布时间】:2011-04-30 03:06:39 【问题描述】:

我实现了我的验证逻辑如下:

        <h:inputText id="title" value="#..." 
            required="true" requiredMessage="...some..text..." 
            validatorMessage="...some..other..text..." >
            <f:validateLength minimum="10" maximum="50"/>
        </h:inputText>

我阅读了很多关于客户端和服务器端验证以及它们的优缺点的信息。但我不知道上面的代码是做什么的。

有人可以解释一下吗:-)

干杯

【问题讨论】:

【参考方案1】:

在客户端验证中,客户端(网络浏览器)在客户端语言的帮助下验证输入,例如javascript。在服务器端验证中,是服务器(webserver)在服务器端语言的帮助下验证输入,例如Java。

您不应该进行客户端验证,因为最终用户可以控制结果(因此也可以破解/欺骗)。通常,您希望使用客户端验证,因为它可以更快地提供反馈。最终用户不需要等待表单提交完成,也不需要面对“内容闪现”(页面空白,然后重新显示新内容)。您想使用服务器端验证来确保提交数据的完整性。最终用户无法控制服务器端验证的结果。

在 JSF 的情况下,通过内置 required="true" 属性和标准/自定义验证器的验证总是服务器端。从 JSF 2.0 开始,可以使用内置的 ajaxical 功能提交表单(并因此也验证表单)。这结合了两个方面的优点:无需内容闪现的即时反馈和服务器端验证的稳健性/完整性。

另见:

How to perform validation in JSF, how to create a custom validator in JSF

【讨论】:

感谢您的这些明智之言。您能否给我一个链接(或示例)如何在我的代码中包含 ajax :-) 这会很棒 :-) ...或者它只是有时令人困惑的 标记? 是的,f:ajax 是在您的代码中引入 javascript/AJAX 的一种方式。有关如何开始使用它的提示,请参阅相关问题:***.com/questions/3138488/… @Sven:将&lt;f:ajax execute="@form" render="@form" /&gt; 放入UICommand 组件中。或者,如果您想验证每个输入元素的模糊,请将 &lt;f:ajax event="blur" render="messageid" /&gt; 放入每个 UIInput 组件中。

以上是关于JSF 验证是客户端还是服务器端?的主要内容,如果未能解决你的问题,请参考以下文章

Struts中客户端验证跟服务器端验证有何区别

如何将服务器端和客户端的 tabview 组件与 jsf 匹配?

如何同时使用 jquery 和服务器端验证客户端?

web服务端给手机客户端发送一条短信验证码,因为要跟客户端提交的比较,服务端怎么先保存这个验证码呢

Anti-CSRF 令牌是存储在客户端、服务器端还是两者兼而有之?

selenium基础-图形验证码