假设要验证账号密码的正确性,把账号密码传进Action后,Action验证完毕后,如何将验证后的结果返回给静态界面(即前台)呢?Action里面又没有Servlet中的request和response等东西?方法就是:
添加对于属性校验的错误信息: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