<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 配置Struts 2的包空间 -->
<package name="lee" extends="struts-default">
<!-- 定义处理用户请求的Action -->
<action name="login" class="lee.LoginAction">
<!-- 配置名为input的逻辑视图,当校验失败后转入该逻辑视图 -->
<result name="input">/input.jsp</result>
<!-- 配置名为success的逻辑视图 -->
<result name="success">/welcome.jsp</result>
</action>
<action name="">
<result>.</result>
</action>
</package>
</struts>
如上,为啥要给input增加视图呢?不增加的话可能会报错:找不到源文件。这是为啥呢?
话说在Struts中类型转换的错误需要有一个名叫conversionError的拦截器来做,这个拦截器被注册在默认的拦截器栈中。Struts框架中的默认配置文件struts-default.xml文件:
<interceptor-ref name="conversionError" />
在上面默认的拦截器中已经包括了conversionError的引用,如果Struts 2的类型转换器执行类型转换时出现错误,该拦截器将负责将对应的错误封装成表单域错误(fieldError),并将这些错误信息放入到ActionContext中,然后会转入名为input的逻辑视图。
至此:应该为该Action增加名为input的逻辑视图定义。
为了在input视图对应的页面中输入转换的错误,只需要在页面中使用<s:fielderror/>标签即可输出该类型转换错误信息。 至于如何使用,举个小例子:
jsp页面中:
<s:fielderror></s:fielderror>
Action中:
public void validate() {
if( ! "simple".equals(loginName)){
addFieldError("loginName", "登录名不正确!");
}else if(! "simple".equals(password)){
addFieldError("password", "密码不正确!");
}
}