struts2 action之间传值

场景:struts2 action与action之间传值的有关问题~

struts2 action与action之间传值的问题~~
我写了一个用户登陆的类~ 如果是管理员就登陆到管理页面,如果是普通用户就跳转到另一个action并用上一个action的参数查询出数据,但是问题就出在action传值上,我参考了很多网上的资料 并一一试了之后 还是得不到上一个action的参数。请大家帮忙看看我的代码. 我写了set/get方法 也用param传了参数, 也试了在session里面取 但是都没有成功,请问我的问题出在那里呢???

struts.xml

<action name="login" class="action.LoginAction">
<result name="input" type="redirectAction" >
<param name="actionName">guerinfo.action</param> 
  <param name="namespace">/</param> 
  <param name="school_id">${school_id}</param>
  <param name="password">${password}</param>
</result>
<result name="success">/main.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="guerinfo" class="action.GuserInfoAction">
<result name="success">/guser.jsp</result>
<result name="error">/error.jsp</result>
</action>
LoginAction

public class LoginAction extends ActionSupport{

private User user = new User();
private String school_id;
private String password;

public String execute() throws Exception {

school_id=user.getSchool_id();
password=user.getPassword();

if(UserDao.CheckLogin(user.getSchool_id(), user.getPassword()).equals("admin")){
ActionContext.getContext().getSession().put("school_id",user.getSchool_id());
ActionContext.getContext().getSession().put("password",user.getPassword());
return SUCCESS;
}else if(UserDao.CheckLogin(user.getSchool_id(), user.getPassword()).equals("user")){
ActionContext.getContext().getSession().put("school_id",user.getSchool_id());
ActionContext.getContext().getSession().put("password",user.getPassword());
return INPUT;
}else{

return ERROR;
}
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String getSchool_id() {
return school_id;
}

public void setSchool_id(String school_id) {
this.school_id = school_id;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}


GuserInfoAction

public class GuserInfoAction extends ActionSupport{

private List<Employee> guserlist = null;
private User user = new User();
private String school_id;
private String password;

public String execute() {
try{
school_id=user.getSchool_id();
password=user.getPassword();

System.out.println(school_id+password);

guserlist = GuserDao.getGuserList(user.getSchool_id(), user.getPassword());
Map map = ActionContext.getContext().getSession();
this.setGuserlist(guserlist);
map.put("guserlist", guserlist);

} catch (SQLException e) {
guserlist = null;
e.printStackTrace();
}
return SUCCESS;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public List<Employee> getGuserlist() {
return guserlist;
}

public void setGuserlist(List<Employee> guserlist) {
this.guserlist = guserlist;
}

public String getSchool_id() {
return school_id;
}

public void setSchool_id(String school_id) {
this.school_id = school_id;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

------解决方案--------------------
action之间传递参数的话用chain。redirectAction应该不行。也可以放在session中或者用get方式传参,如果担心密码什么的话,可以hash加密后传输。
补充一句,你的代码还差一个service层,在action中不应该直接调用DAO层,DAO层应该由service层调用,action层调用service层。
------解决方案--------------------
楼上正解,redirectAction是地址跳转,相当于一个地址到另一个地址,参数应经在上下文丢弃了。你可以理解为从一个网址跳到另一个网址,参数当然丢了啊。
action之间跳转如果想保留上一个action的参数要用chain。

session能不用就不用,因为如果是多用户场景,它会让服务器内存迅速耗尽的!session只适合于一些长会话的场合(多个不同页面的跳转,又要记住用户在多个页面选择的数据),比如购物车之类的。

希望你在解决问题之后,好好反思一下struts2的返回类型有何不同,你会受益匪浅的。

另外楼上对于分层的说法也对,不过对于你来说可能还要再修炼修炼再理解,呵呵。