----struts2标签示例说明可参考网页:http://www.roseindia.net/struts/struts2/struts-2-tags.shtml
在struts2中,action在接受到用户提交的数据时,有时需要对其进行校验,检验成功或失败需要向用户
回显相关的信息,为了能够方便在jsp页面回显相关信息,action提供了一些方法,诸如:
addFieldError addActionError, addActionMessages等,前者主要是针对一些属性校验的问题,
后者是action本身的问题,最后一个一般是action正确的处理结果。如果使用这些方法添加了一信息,则这些
信息可以在jsp页面通过标签获取到,相关标签为:
actionerror, 它用来获取addActionError方法添加的内容
actionmessage,它用来获取addActionMessage方法添加的内容
fielderror, 它用来获取addFieldError方法添加的有关属性的内容
property,它是一个一般便签,主要是用来获取相关属性值。
比如,action校验属性例子:
import com.opensymphony.xwork2.ActionSupport;
public class MyAction2 extends ActionSupport {
private String name;
private String password;
public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
this.addFieldError("password", "password is wrong");
this.addActionError("name is wrong ,action error");
return SUCCESS;
}else{
this.addActionMessage("name is valid");
return SUCCESS;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
超链接jsp页面:
<a href="action/input!add?name='zhangsan'">点击</a>
success.jsp页面
<s:fielderror />
<s:fielderror fieldName="name" theme="simple"/>
<br />
<s:actionmessage/><br />
<s:property value="errors.name[0]"/><br />
<s:property value="actionErrors[0]" /><br />
<s:debug></s:debug>
error.jsp页面
<s:actionerror /><br />
需要说明的是<s:fielderror />要是没有指定fieldName,它将返回所有addFieldError方法添加的信息,而
添加了FiledName的话,将返回由addFieldError添加有关此属性的所有内容,如下:
<s:fielderror />返回结果如下:
.name is error
.name is too long
.password is wrong
<s:fielderror fieldName="name" theme="simple"/>返回结果如下:
.name is error
.name is too long
<s:actionmessage />返回由addActionMessage方法添加的内容
<s:actionerror />返回由addActionError方法添加的内容
值得说明的是,上面三个表签,其返回的值都是带有css格式的内容,而不是纯字符串内容。要获取到纯字符
串内容,需要使用到标签<s:property>标签。在说明property标签前,有一个内容需要先弄明白,上面通过三种add
方法添加的内容都是加入到哪里去了?struts2其实将上面的内容都加入到了一个叫做value stack容器里,它其实
是一个栈,它一般会将action的相关属性添加进去。如:
Value Stack Contents
Object | Property Name | Property Value |
---|---|---|
cn.itcast.action.MyAction2 | texts | null |
actionErrors | [name is wrong ,action error] | |
errors | {name=[name is error, name is too long], password=[password is wrong]} | |
fieldErrors | {name=[name is error, name is too long], password=[password is wrong]} | |
errorMessages | [name is wrong ,action error] | |
container | There is no read method for container | |
name | 'zhangsan' | |
locale | zh_CN | |
actionMessages | [name is valid] | |
password | null | |
com.opensymphony.xwork2.DefaultTextProvider | texts | null |
下图是一个对上述值栈的一个相关属性的键值对示意图:
此栈中包含action的相关的texts, actionErrors, errors, fieldErrors, errorMessages, actionMessages及action定义的相关属性
,这里为name和password. 其中actionErrors值对应的类似一个数组,errors和fielderrors类似一个map.
这些值都可以通过<s:property>标签来获取,它需要借助ognl表达式,下面是其获取的示例:
<s:property value="errors.name[0]"/>
<s:property value="actionErrors[0]" /><br />
前者用来获取errors值(map集合)中的key为name的值(数组)中的第一个值。即name is error
后者是获取actionErrors值中的第一个值。
标签<s:debug></s:debug>是用来显示上述值栈的,只需要在jsp页面上添加此标签即可。