struts2--(3)--一些小的知识---简单数据验证信息回显问题

来源:互联网 发布:wkwebview 监听js方法 编辑:程序博客网 时间:2024/06/06 20:39

----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

ObjectProperty NameProperty Valuecn.itcast.action.MyAction2textsnullactionErrors[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]containerThere is no read method for containername'zhangsan'localezh_CNactionMessages[name is valid]passwordnullcom.opensymphony.xwork2.DefaultTextProvidertextsnull

下图是一个对上述值栈的一个相关属性的键值对示意图:

此栈中包含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页面上添加此标签即可。

0 0
原创粉丝点击