简单数据校验
首先我们在struts.xml中进行如下配置:
<action name="hello" class="com.bjsxt.struts2.user.action.MyAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
然后MyAction中的代码如下:
public class MyAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute(){
System.out.println(name);
if(name == null||!name.equals("admin")){
this.addFieldError(name, "name is error!");
return ERROR;
}
return SUCCESS;
}
}
我们注意到在MyAction中的execute方法中添加了一个if语句来判断name是否等于admin,当不等于时出现name is error!字样,这就是一个简单的数据校验,其中addFieldError 记录map格式的内容 key=name value=name is error ! 后台用addFieldError记录,前台用<s:property value="fieldErrors">显示 因为fieldErrors与actionErrors 里的key会有重名现象,所以用<s:property value="errors">显示记录的所有内容,用error.name[ ]显示想要的内容。
具体代码如下:
<body>
<s:fielderror fieldName="name" theme="simple"/>
<s:property value="errors.a[0]"/>
<s:debug/>
</body>
其中theme将在后面讲到,要注意的是这里用到了struts的标签,所以要加上下面这样一句话:
<%@taglib uri="/struts-tags" prefix="s" %>
uri指定标签库的位置,prefix表示前缀,其中标签库位于struts的jar包下面的META-INF文件夹下,名字是struts-tags.tld
debug标签主要用来调试的,加上之后在页面中会显示如下一张图表:
它包括两部分,一个是Value Stack Contents和Stack Context,它们都是栈,首先在值栈中会把MyAction的属性都加进去,其中errors包括的fieldErrors和actionErrors,它是一个Map,图中它的key对应是a,value对应是name is error!,这也就解释了value="errors.a[0]",其中errors.a取到了对应name为a的value,其中value又是一个“数组”,所以要取数组的第一项就要加上[0],像这种表达式就是ognl表达式,这在后面会详细讲解。