在使用标准转换器或验证器时,当发生错误时,会有一些默认的错误讯息显示,这些讯息可以使用<h:
messages>或<h:message>标签来显示出来,而这些默认的错误讯息也是可以修改的,您所要作的是提供一个讯息资源文件,例如:
javax.faces.component.UIInput.CONVERSION=Format Error. javax.faces.component.UIInput.CONVERSION是用来设定当转换器发现错误时显示的讯息,而 javax.faces.component.UIInput.REQUIRED是在标签设定了required为true,而使用者没有在栏位输入时显 示的错误讯息。 您要在faces-config.xml中告诉JSF您使用的讯息文件名称,例如:
<?xml version="1.0"?> 在这边我们设定了讯息文件的名称为messages_xx_YY.properties,其中xx_YY是根据您的Locale来决定,转换器或验证器的错误讯息如果有设定的话,就使用设定值,如果没有设定的话,就使用默认值。 验证器错误讯息,除了上面的javax.faces.component.UIInput.REQUIRED之外,还有以下的几个:
在您提供自订讯息的时候,也可以提供{0}或{1}来设定显示相对的属性值,以提供详细正确的错误提示讯息。 javax.faces.component.UIInput.CONVERSION=Error.
javax.faces.component.UIInput.CONVERSION_detail= Detail Error. .... 除了在讯息资源档中提供讯息,您也可以在程序中使用FacesMessage来提供讯息,例如在 自订验证器 中我们就这么用过: ....
if(password.length() < 6) { FacesMessage message = new FacesMessage( FacesMessage.SEVERITY_ERROR, "字节长度小于6", "字节长度不得小于6"); throw new ValidatorException(message); } .... 最好的方法是在讯息资源档中提供讯息,这么一来如果我们要修改讯息,就只要修改讯息资源档的内容,而不用修改程序,来看一个简单的例子,假设我们的讯息资源档中有以下的内容: onlyfun.caterpillar.message1=This is message1.
onlyfun.caterpillar.message2=This is message2 with {0} and {1}. 则我们可以在程序中取得讯息资源档的内容,例如: package onlyfun.caterpillar;
import java.util.Locale; import java.util.ResourceBundle; import javax.faces.context.FacesContext; improt javax.faces.component.UIComponent; import javax.faces.application.Application; import javax.faces.application.FacesMessage; .... public void xxxMethod(FacesContext context, UIComponent component, Object obj) { // 取得应用程序代表对象 Application application = context.getApplication(); // 取得讯息文件主名称 String messageFileName = application.getMessageBundle(); // 取得当前 Locale 对象 Locale locale = context.getViewRoot().getLocale(); // 取得讯息绑定 ResourceBundle 对象 ResourceBundle rsBundle = ResourceBundle.getBundle(messageFileName, locale); String message = rsBundle.getString( "onlyfun.caterpillar.message1"); FacesMessage facesMessage = new FacesMessage( FacesMessage.SEVERITY_FATAL, message, message); .... } .... .... ....
String message = rsBundle.getString( "onlyfun.caterpillar.message2"); Object[] params = {"param1", "param2"}; message = java.text.MessageFormat.format(message, params); FacesMessage facesMessage = new FacesMessage( FacesMessage.SEVERITY_FATAL, message, message); ....
|