如果您使用JSP作为Web应用程序的视图(通常是这样的),那么您就可以使用 <faces:validator>
标签来为JSF组件指定验证程序,如下面的代码所示: 上面的代码片断将一个验证程序与一个文本字段关联起来。您只要使用
<faces:validate>
标签的className属性来指定验证程序的类名。上面指定的验证程序是一个JSF内置的验证程序,用于确保一个组件的值不为null。JSF提供了很多内置的验证程序,但您也可以实现自己的验证程序,并将它们与一个JSF组件关联起来。
<faces:validator className ='javax.faces.validator.RequiredValidator'/>
</faces:textentry_input >
< html >
< head >
< title > A Simple JavaServer Faces Application </ title >
</ head >
< body >
<% ... @ taglib uri='http://java.sun.com/j2ee/html_basic/' prefix='faces' %>
<font size='4'>Please enter your name and password</font>
<faces:usefaces>
<faces:form id='simpleForm' formName='simpleForm'>
<table>
<tr>
<td>Name:</td>
<td>
<faces:textentry_input id='name'>
<faces:validator
className='com.sabreware.validators.NameValidator'/>
<faces:validator
className='javax.faces.validator.LengthValidator'/>
<faces:attribute
name='javax.faces.validator.LengthValidator.MINIMUM'
value='3'/>
</faces:textentry_input>
</td>
<td>
<faces:validation_message componentId='name'/>
</td>
</tr>
<tr>
<td>Password:</td>
<td>
<faces:textentry_secret id='password'/>
</td>
</tr>
</table>
<p><faces:command_button id='submit' commandName='Log In'/>
</faces:form>
</faces:usefaces>
</body>
</html>
前述的JSP页面使用
<faces:validator>
标签来将验证程序与一个JSF组件关联起来。在这种情形中,验证程序是一个验证用户名的自定义验证程序和一个JSF内置验证程序,用于保证用户名至少有3个字符长。
清单2中列出了清单1中使用的自定义验证程序。
清单2. WEB-INF/classes/com/sabreware/validators/NameValidator.java
import java.util.Iterator;
import javax.faces.component.UIComponent;
import javax.faces.component.AttributeDescriptor;
import javax.faces.context.FacesContext;
import javax.faces.context.Message;
import javax.faces.context.MessageImpl;
import javax.faces.validator.Validator;
public class NameValidator implements Validator ... {
public AttributeDescriptor getAttributeDescriptor(String attributeName) ...{
return null;
}
public Iterator getAttributeNames() ...{
return null;
}
public void validate(FacesContext context, UIComponent component) ...{
String name = (String)component.getValue();
if(!"phillip".equalsIgnoreCase(name)) ...{
context.addMessage(component,
new MessageImpl(Message.SEVERITY_ERROR, "bad username",
"The username " + name + " is invalid"));
}
}
}
前述的验证程序实现了javax.faces.validator.Validator接口,而该接口定义了以下方法:
- void validate(FacesContext, UIComponent)
- Iterator getAttributeNames(String)
- AttributeDescriptor getAttributeDescriptor(String)
validate()方法为指定的组件执行实际的验证。 Validator接口定义的另外两个方法被工具用来发现与特定验证程序相关的属性(及其描述)。在这种情形下,验证程序没有任何属性,因此getAttributeDescriptor()和getAttributeNames()方法只返回null。
如果组件的值是有效的,那么验证程序的validate()方法就什么都不做。如果其值是无效的,validator()方法就会创建消息将其添加到JSF上下文中。所有的这一切发生在JSF生命周期的Process Validations阶段。如果一个组件验证失败(表明已经将消息添加到JSF上下文中),JSF实现就直接进入Render Response阶段。否则,生命周期进入Apply Model Values阶段
原文摘自(有删改):http://www.dmresearch.net/it-doc/1000000317/1000063243.php