今天在写struts2拦截器器时,忽然想到,action类一定要实现execute() 方法呢?
面我简单说下我的理解:
这个方法最初来源于Action类中的exceute(),我们常常是继承实现Action接口的ActionSupport类,从而获得exeute方法。为啥不直接去实现Action接口呢,其实也行,只不过ActionSupport中有更多利于我们完成项目的方法,例如validate(),他可以在执行execute()之前进行校验,如果校验失败自动跳到 name=input的result中。扯远了,当重写了execute()后,可以在execute()中编写逻辑,并且默认返回success,所以result中要有对应的success否则就要报错了。
但是总不能所有逻辑都写到一个方法中吧!当然,咱可以在action方法中写其他方法,在配置文件的action标签中写method属性,这样才能让struts2知道要执行那个方法。
所以,不一定非要实现execte(),用自己写的方法也行,但是要指定method呀!
-------------------action类-------------------------------
package com.haha.struts_38;
import com.opensymphony.xwork2.ActionSupport;
public class AgeAction extends ActionSupport {
private String username;
private String age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String age() throws Exception {
System.out.println("校验成功");
return "ageSuccess";
}
}
-------------------配置文件-------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<package name="hh_38" namespace="/hh_38" extends = "struts-default" >
<action name="loginAction" class ="<span style="font-family: Arial, Helvetica, sans-serif;">com.haha.struts_38</span><span style="font-family: Arial, Helvetica, sans-serif;">.AgeAction" method="age"></span>
<result name="input">
/login.jsp
</result>
<result name="ageSuccess">
/success.jsp
</result>
</action>
</package>
</struts>