如何实现jsf验证器?

Posted

技术标签:

【中文标题】如何实现jsf验证器?【英文标题】:How to implement jsf validator? 【发布时间】:2011-05-30 19:11:17 【问题描述】:

嗨,

我想知道如何在 JSF 中实现 Validator。声明验证器 ID 有什么好处。什么时候会在生命周期中被调用?我已经实现了以下代码。请找出代码中有什么问题。我在生命周期的任何地方都没有看到它被调用。

   <?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
 <lifecycle>
  <phase-listener>javabeat.net.jsf.JsfPhaseListener</phase-listener>
 </lifecycle>
 <validator>
  <validator-id>JsfValidator</validator-id>
  <validator-class>javabeat.net.jsf.JsfValidator</validator-class>
 </validator>

 <managed-bean>
  <managed-bean-name>jsfBean</managed-bean-name>
  <managed-bean-class>javabeat.net.beans.ManagedBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
 <navigation-rule>
  <navigation-case>
   <from-outcome>success</from-outcome>
   <to-view-id>success.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>
</faces-config>


public class JsfValidator implements Validator 

 public JsfValidator()
 
  System.out.println("Inside JsfValidator Constructor");
 
 @Override
 public void validate(FacesContext facesContext, 
       UIComponent uiComponent, 
       Object object)
   throws ValidatorException 
  System.out.println("Inside Validator");
 

【问题讨论】:

【参考方案1】:

您必须将此自定义验证器绑定到 jsf 页面上的某个 jsf 组件,这就是使用您定义的 vaidator-id 的地方。例如,您的 jsf 页面可能看起来像这样

<h:inputText id="myInput" value="#mybean.property">
     <f:validator validatorId="JsfValidator"/>
</h:inputText>

如果您正在学习 jsf 验证和转换,那么我强烈建议您阅读this article,它通过示例清楚地解释了验证发生在 jsf 生命周期的哪个阶段等。

【讨论】:

以上是关于如何实现jsf验证器?的主要内容,如果未能解决你的问题,请参考以下文章

如何从非人脸请求中调用 JSF 支持 bean 方法?

在 JSF 中使用 bean 验证进行本地化

如何在 JSF 中执行验证,如何在 JSF 中创建自定义验证器

新手JSF问题 - 如何实现这种布局?

如何在 JSF 中使用会话实现多用户登录

html 如何使用JSF 2实现简单聊天