有关Struts2框架以编码方式在后端校验从前端获取的数据相关问题

今天在学习Struts2框架的时候发现了一个问题,困扰了好久。今天也发帖子问大牛了,可能大牛们一般比较忙,我测试了一下午才发现问题。

就是用Struts2的硬编码方式校验从前端获取数据时,我发现validate校验通过后,一直无法执行我的业务方法save,然后又加上了validateSave方法,只执行了validate和validateSave两个方法,还是没有执行业务方法。最后索性把validate的两个方法都注释了,返回的结果集input也注释了,把项目跑起来,发现报错No result defined for action cn.xlp.action.UserAction and result input,排查了半天,发现我的实体类里面有一个属性是int(考虑到从前端获取到的数据是String),然后把int全部换成String在把项目跑起来,发现就能运行了,而且我把以前的两个validate方法加上去,每个方法都会运行。但是有时候实体类里面肯定会有除String属性为的其他属性,我就拿以前项目对比,最后发现那个业务处理类继承了ActionSupport类,我把此类注释后,把数据换成int类型,然后运行,就可以运行成功了。

从这个项目里面我发现:如果业务处理类继承了ActionSupport类,

1.如果实体类里面只有String的数据类型,不用配置结果集input;

2.如果实体类里面有除String类型外的其他数据类型,Struts框架会对struts.xml检测,看对应action中的结果集是否配置了input

但是我又发现了另外一个问题,就是第二种方式都配置好了后,运行只会执行validate和validateSave这两个方法,业务方法又不执行了。希望有大牛看到了帮小弟解决一下,然后有错误的地方希望指正一下。感谢!

业务处理类:

public class UserAction extends ActionSupport {
	
	private User user;
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	/**
	 * 先执行calidate方法,在执行业务方法
	 * 在validate方法中,添加了FieldError或者ActionError方法
	 * 将执行不能通过,并且返回Input
	 */
	@Override
	public void validate() {
		System.out.println("----validate---");
	}
	public void validateSave() {
		System.out.println("----validateSave-----");
		if(user.getName().length()<4||user.getName().length()>10) {
			this.addFieldError("user.name","用户名输入错误");
		}
	}
	
	public String save(){
		System.out.println("----execute----");
		return "success";
	}
}

struts.xml的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    	<package name="default" namespace="/" extends="struts-default">
    		<action name="save" class="cn.xlp.action.UserAction" method="save">
    			<result name="success">/success.jsp</result>
    			<result name="input">/save.jsp</result>
    		</action>
    	</package>
    </struts>

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值