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

16

我按照以下方式实现了我的验证逻辑:

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

我读了很多关于客户端和服务器端验证以及它们的优缺点的文章。但是我对上面的代码一无所知。

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

谢谢

1个回答

34
在客户端验证中,是客户端(Web浏览器)使用客户端语言(例如JavaScript)来验证输入。在服务器端验证中,是服务器(Web服务器)使用服务器端语言(例如Java)来验证输入。
永远不要仅使用客户端验证,因为结果可以被最终用户控制(因此也容易被黑客/欺骗)。通常,您会喜欢使用客户端验证,因为它能够更快地提供反馈。最终用户无需等待表单提交完成,也无需面对“内容闪烁”(页面变空然后重新显示新内容)。您应该使用服务器端验证来确保提交的数据完整性。最终用户无法控制服务器端验证的结果。
在JSF的情况下,通过内置的required="true"属性和标准/自定义验证器进行的验证始终是服务器端的。自从JSF 2.0以来,使用内置的ajax功能提交表单(因此也验证表单)成为可能。这将两个世界的优点结合起来:具有即时反馈而无需内容闪烁,并具有服务器端验证的强大性/完整性。
另请参见:
- 如何在JSF中执行验证,如何创建自定义验证器在JSF

谢谢您的明智话语。您能否给我一个链接(或示例),告诉我如何将ajax包含到我的代码中呢?那太好了 :-) ...还是有时令人困惑的<f:ajax>标签? - Sven
1
是的,f:ajax 是引入 JavaScript/AJAX 到您的代码中的一种方式。有关如何开始使用它的指针,请参见相关问题:http://stackoverflow.com/questions/3138488/how-to-use-ajax-with-jsf-2-0 - Tuukka Mustonen
2
@Sven:将<f:ajax execute="@form" render="@form" />放置在UICommand组件内。或者,如果您想在每个输入元素失去焦点时进行验证,请将<f:ajax event="blur" render="messageid" />放置在每个UIInput组件内。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接