Struts2学习笔记(二)

来源:互联网 发布:java crm源码下载 编辑:程序博客网 时间:2024/05/22 00:54

简单数据校验

首先我们在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表达式,这在后面会详细讲解。