为什么struts.xml文件中要增加input视图?

 
<?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", "密码不正确!");
        }
    } 


 

你可能感兴趣的:(jsp,struts,input,action,login,encoding)