struts2中action和field级别错误处理

在struts2中,一般的action都继承ActionSupport这个类,可以重写public void validate()来进行数据校验,对应提示信息来说一般有两个比较常用的方法就是this.addFieldError("field name","error message"); 和 this.addActionError("error message");两个方法。

由于在ActionSupport这个类实现了ValidationAware接口,接口里面声明了这两个方法:

1public void addActionError(String anErrorMessage) {2    validationAware.addActionError(anErrorMessage);3  }45  public void addActionMessage(String aMessage) {6    validationAware.addActionMessage(aMessage);7  }

而ValidationAwareSupport实现了ValidationAware接口,通过查看ValidationAwareSupport源码中的两个错误提示方法:

private Collection actionErrors;    private Map fieldErrors;1public synchronized void addFieldError(String fieldName, String errorMessage) {2    final Map errors = internalGetFieldErrors();3    List thisFieldErrors = (List) errors.get(fieldName);45    if (thisFieldErrors == null) {6      thisFieldErrors = new ArrayList();7      errors.put(fieldName, thisFieldErrors);8    }910    thisFieldErrors.add(errorMessage);11  }1public synchronized void addActionError(String anErrorMessage) {2    internalGetActionErrors().add(anErrorMessage);3  }4

注:由于fielderrors级别是Map类型,所以this.addFieldError("field name","error message"); ,而actionerror级别是Collection级别,所以this.addActionError("error message");

在实际的项目开发应用中如果同时用到field和action错误级别的时候,在jsp页面中的表单有用到struts2的标签来实现的话,就有可能对于同一个表单,既有filed级别error提示又有action级别的error提示,这时,可以根据项目的实际需要来取舍,但是如果两个都要同时存在的时候,只显示action级别的error,而不显示field级别的action,由于struts2标签默认就是显示field级别的error,所以要修改模板,加入theme="simple"即可,这时struts2表单那标签默认的显示field错误提示失效,使用这个模板的好处还可以和普通的html一样随便设计版面。例如:<s:form action="RegisterAction"theme="simple" >

PS:要显示action级别的错误提示,需要在jsp页面中的表单里面加入<s:actionerror/>。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索struts2标签
, 表单
, action
, struts2 action jsp
, 提示
, error
, field
, struts2 action 方法
, struts2的action方法
, struts2 404错误
, addactionmessage
, struts2标签 action
级别
struts2 fielderror、struts2 textfield、struts textfield属性、struts2 s textfield、struts2 s fielderror,以便于您获取更多的相关知识。

时间: 2024-10-16 04:06:01

struts2中action和field级别错误处理的相关文章

input视图-Struts2中action出现错误返回input的机制

问题描述 Struts2中action出现错误返回input的机制 2C 当action出现错误后,如何返回的input?通过哪个类返回的?希望大神们说的尽量详细点,先谢过了! 解决方案 链接:http://pan.baidu.com/s/1nuUL6OD 密码:igtz 解决方案二: return ""input"";或者return Action.Input;就OK了呀然后返回的就是input 如果你说的是显示错误信息的话调用addFieldError()方法时

Struts2中Action接收参数的方法

Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=Magci: 2.使用DomainModel接收参数:     a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法:    

javaweb-关于struts2中action层的问题

问题描述 关于struts2中action层的问题 今天公司要我把实体entity复制一份,写在一个类中,查出来的数据通过BeanUtils.copyProperties放在复制的那个类中,action不实现modelDriven,而是get/set复制的这个类.前面这些只是今天遇到的,大概说一下. 主要想问的是,公司那边不让写这一句: 那我查到的东西,怎么在jsp页面写呢?我唯一能想到的是在action中写一个List属性,get/set.不过我觉得这样好麻烦,他为什么不让使用这一句呢?我搞不

struts2中action中的方法无故被提交两次

问题描述 struts2中action中的方法无故被提交两次 import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.hsp.book.domain.Book;import com.hsp.book.service.BookService;import c

struts2中Action到底是什么,怎么理解

问题描述 struts2中Action到底是什么,怎么理解 1.配置完web.xml 2.创建视图页面login.jsp 3.创建业务控制器LoginAction类 (解释说:创建业务控制器LoginAction类,该类为程序的Action类) 4.配置LoginAction类 (解释说:当Action处理完客户端请求后返回一个字符串,没个字符串对应一个视图) 那么这个Action到底是什么,是一个类吗?怎么理解它,它和用于标签的有什么区别. 解决方案 首先,你了解Servlet么?Servle

struts2.0-ssh struts2中 action执行两次

问题描述 ssh struts2中 action执行两次 1 排除重复提交的可能 2 点击页面中的超链接,action 执行两次:但在地址栏中输出地址,action只执行了一次(这个让我很震惊!) 3 执行的action 方法名为add(), 不存在get默认执行的情况 解决方案 struts2 action执行两次的原因struts2 中action执行两次的问题struts2 json插件执行原理 action执行两次 解决方案二: 这个肯定是你代码出错了,你应该把使用的界面代码贴出来 解决

Struts2中Action中是否需要实现Execute方法_java

今天有朋友问我Struts2中Action必须实现execute方法吗?顺利的回答出来了. 其实分两种情况: 1)如果你的Action类是继承自ActionSupport或是BaseAction的话,确切的说是重写了execute方法,ActionSupport里的默认实现就是返回"success"视图.因此,你可以不实现execute方法,只要你的struts.xml里有"success"对应的result即可. <action name="doR

Struts2中action获取request、response、session的方式

之前用惯struts1.x,那些request啊session之类都是方法自带有的,我们直接调用就可以:而平时公司项目中用到有struts2.x的话,action所继承的BaseAction等底层那些都是人家封装好的,直接继承就可以.现在自己搞个,才知道struts2的request.response.session原来都被隐藏的了,不过struts2提供有两种方式给我们访问.     第一种方式,非IoC(Spring中的控制反转)方式:    /** * File Name:BaseActi

Struts2中Action的通配符使用方法

在这篇<Struts2学习之配置单个Action多控制处理逻辑>文章中,讲到指定method属性时,列举了以下的配置代码:  代码如下 复制代码 <struts>     <constant name="struts.enable.DynamicMethodInvocation" value="true" />     <package name="lee" extends="struts-de