日期:2014-05-16  浏览次数:20806 次

struts2的action的问题(新手问题见笑了)
 <action name="login*" class="com.bjsxt.struts2.user.action.LoginAction{1}">
            <result>/user_login_success.jsp</result>
        </action>

  
import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction1 extends ActionSupport {

private Map request;
private Map session;
private Map application;

public LoginAction1() {
request = (Map)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}

public String execute() {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS; 
}


}




如题,这段.xml这样配置了之后,com.bjsxt.struts2.user.action.LoginAction{1}里面的函数是如何执行,
 LoginAction1()是在什么时候执行的


还有例如
 import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
private String name;
public String add() {
System.out.println("name=" + name);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}


}

action调用了add方法,而set和get方法是什么时候执行的,struts2怎么区分哪些初始化用的例如get,set,哪些是给action调用的例如add方法。

------解决方案--------------------
<action name="login*" class="com.bjsxt.struts2.user.action.LoginAction{1}">
上面的* 表示任意字符,就是说struts2根据你传递的actionName 为login开头的字符串才会匹配去LoginAction中找方法,然后{1}这个占位符匹配前台的任意字符,,,所以一看你就配置错了

换成
<action name="login*" class="com.bjsxt.struts2.user.action.LoginAction1" method="login{1}">
这样才行,,,,,

set方法 是页面跳入action的时候赋值 时候用的,