现在,我们将使用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
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/java/)errors.append( "<P" );
errors.append( "<PValue for field "" +
field + "" is invalid." );
if ( ex instanceof java.lang.NumberFormatException )
errors.append( " The value must be a number." );
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/java/)}
%
<%
// 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。