至此,我们还有一些问题还没有澄清。首先,用户不能清除名字区域而且如果用户在“age”区域键入一个不对的内容(不是一个效果的整型数值),Java异常错误就会发生。
现在,我们将使用Blazix标志库中的其他标志来解决这个问题。Blazie提供了一个blx:setProperty标志来解决这个问题。Blx:setProperty允许我们定义一个异常错误处理方法。如果有异常错误发生,我们可以为用户收集一个错误信息并且继续处理。
下面是我们修改后的SaveName.jsp,它可以处理任何错误。它不仅可以显示GetName.jsp并且在其上可以键入正确的数据,而且自动地连接到NextPage.jsp:
〈%@ taglib prefix="blx" uri="/blx.tld" %〉
〈%!
boolean haveError;
StringBuffer errors;
public void errorHandler( String field,
String value,
Exception ex )
{
haveError = true;
if ( errors == null )
errors = new StringBuffer();
else
errors.append( "〈P〉" );
errors.append( "〈P〉Value for field \"" +
field + "\" is invalid." );
if ( ex instanceof java.lang.NumberFormatException )
errors.append( " The value must be a number." );
}
%〉
〈%
// Variables must be initialized outside declaration!
haveError = false;
errors = null;
%〉
---------------
〈BODY〉
〈jsp:useBean id="user" class="UserData" scope="session"/〉
〈blx:setProperty name="user"
property="*"
onError="errorHandler"/〉
〈%
if ( haveError ) {
out.println( errors.toString());
pageContext.include( "GetName.jsp" );
} else
pageContext.forward( "NextPage.jsp" );
%〉
〈/BODY〉
〈/HTML〉
这里要注意haveError和errors必须每次都重新初始化,因为它们在声明的外部被初始化。
现在,如果一个错误发生在blx:setProperty处理的过程,我们就显示这个错误并再次回到GetName.jsp以使用户可以校正这个错误。如果没有错误发生,我们就自动让用户连接到NextPage.jsp。