假设要验证账号密码的正确性,把账号密码传进Action后,Action验证完毕后,如何将验证后的结果返回给静态界面(即前台)呢?Action里面又没有Servlet中的request和response等东西?方法就是:
添加对于属性校验的错误信息:addFieldError
addFieldError("XX","yyy");
XX是出错的信息名称(一般是属性名),yyy是这个错误的具体信息。
这个错误信息会随着跳转,进入前台页面,然后在前台将它取出来。
例子:
准备工作:
UserAction4.java:
struts.xml:
前台链接:
使用addFieldError方法和s:fieldError标签简单处理数据调验:<br/>
<a href="<%=basePath %>javaee/user4!add?name=neck">添加用户</a><br/>
成功界面:
User_Add_success.jsp:
失败界面(下面详细介绍前台失败界面如何得到后台的错误信息):
首先加入标签库至工程:
(例如将标签库文件struts-tags.tld放入/META-INF/maven文件夹下)
在web.xml中配置:
在前台失败Jsp页面调用标签库
prefix指定标签的前缀是什么
下面写
方式一:
其中s:fielderror标签就是取出对应fieldName的错误信息(前面设置的this.addFieldError("name", "name is error");这句)
s:fielderror标签的缺点是在静态页面以<ul>效果强制显示(所以在企业中应用不多)
方式二:
<s:debug></s:debug>会在静态界面中出现一个“[debug]”的错误链接,点击后会查看到你错误的信息(比如这个就是值栈错误,错误信息就在errors或者fieldErrors中,就是PropertyName和与之对应的PropertyValue(这里取得map类型的值))。
看了[Debug]之后,你就会明白,可以从初始化信息里面的errors或者fieldErrors中得到错误信息,所以就有了<s:property value="errors.name[0]"/>来获取错误信息(value="errors"取出的信息是{name=[name is error]},使用value="errors.name[0]"来取得name is error)
PS:同一个错误名添加多个错误信息也是可以的:
Action中写:
jsp中取:
添加对于属性校验的错误信息:addFieldError
addFieldError("XX","yyy");
XX是出错的信息名称(一般是属性名),yyy是这个错误的具体信息。
这个错误信息会随着跳转,进入前台页面,然后在前台将它取出来。
例子:
准备工作:
UserAction4.java:
package cn.edu.hpu.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction4 extends ActionSupport{
private String name;
public String add(){
if(name==null||!name.equals("admin")){
this.addFieldError("name", "name is error");
return "error";
}
System.out.println("name="+name);
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
struts.xml:
<package name="default" namespace="/javaee" extends="struts-default">
<action name="user4" class="cn.edu.hpu.action.UserAction4">
<result name="success">/User_Add_success.jsp</result>
<result name="error">/User_Add_error.jsp</result>
</action>
</package>
前台链接:
使用addFieldError方法和s:fieldError标签简单处理数据调验:<br/>
<a href="<%=basePath %>javaee/user4!add?name=neck">添加用户</a><br/>
成功界面:
User_Add_success.jsp:
<html>
<head>
<title>My JSP 'User_Add_success.jsp' starting page</title>
</head>
<body>
User Add success! <br>
</body>
</html>
失败界面(下面详细介绍前台失败界面如何得到后台的错误信息):
首先加入标签库至工程:
(例如将标签库文件struts-tags.tld放入/META-INF/maven文件夹下)
在web.xml中配置:
<jsp-config>
<taglib>
<taglib-uri>/struts-tags</taglib-uri>
<taglib-location>/META-INF/maven/struts-tags.tld</taglib-location>
</taglib>
</jsp-config>
在前台失败Jsp页面调用标签库
<%@taglib uri="/struts-tags" prefix="s"%>
uri指定标签库的位置
prefix指定标签的前缀是什么
下面写
方式一:
<body>
添加用户失败!! <br/>
<s:fielderror fieldName="name"/>
<br/>
</body>
其中s:fielderror标签就是取出对应fieldName的错误信息(前面设置的this.addFieldError("name", "name is error");这句)
s:fielderror标签的缺点是在静态页面以<ul>效果强制显示(所以在企业中应用不多)
方式二:
<body>
添加用户失败!! <br/>
<s:property value="errors.name[0]"/>
<s:debug></s:debug>
<br/>
</body>
<s:debug></s:debug>会在静态界面中出现一个“[debug]”的错误链接,点击后会查看到你错误的信息(比如这个就是值栈错误,错误信息就在errors或者fieldErrors中,就是PropertyName和与之对应的PropertyValue(这里取得map类型的值))。
看了[Debug]之后,你就会明白,可以从初始化信息里面的errors或者fieldErrors中得到错误信息,所以就有了<s:property value="errors.name[0]"/>来获取错误信息(value="errors"取出的信息是{name=[name is error]},使用value="errors.name[0]"来取得name is error)
PS:同一个错误名添加多个错误信息也是可以的:
Action中写:
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
jsp中取:
<s:property value="errors.name[0]"/>
<s:property value="errors.name[1]"/>
(value="errors"取出的信息是{name=[name is error,name is too long]},使用value="errors.name[0]"来取得name is error,使用value="errors.name[1]"来取得name is too long)
转载请注明出处:http://blog.csdn.net/acmman/article/details/44238869