struts2 action与action之间传值的问题~~

vb520530 2012-01-26 02:27:27
我写了一个用户登陆的类~ 如果是管理员就登陆到管理页面,如果是普通用户就跳转到另一个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;
}
}
...全文
490 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vb520530 2012-01-26
  • 打赏
  • 举报
回复
<action name="login" class="action.LoginAction">
<result name="input" type="chain" >
<param name="actionName">guerinfo</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>
这样就改好了~~ 谢谢两位的帮助~ 3楼说的有空我一定好好学习~ 谢谢~
vb520530 2012-01-26
  • 打赏
  • 举报
回复
我用过chain但是报错
There is no Action mapped for namespace [/] and action name [guerinfo.action] associated with context path [/NORSU].
不知道是那里错了。。。
NewMoons 2012-01-26
  • 打赏
  • 举报
回复
楼上正解,redirectAction是地址跳转,相当于一个地址到另一个地址,参数应经在上下文丢弃了。你可以理解为从一个网址跳到另一个网址,参数当然丢了啊。
action之间跳转如果想保留上一个action的参数要用chain。

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

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

另外楼上对于分层的说法也对,不过对于你来说可能还要再修炼修炼再理解,呵呵。
djlxue 2012-01-26
  • 打赏
  • 举报
回复
action之间传递参数的话用chain。redirectAction应该不行。也可以放在session中或者用get方式传参,如果担心密码什么的话,可以hash加密后传输。
补充一句,你的代码还差一个service层,在action中不应该直接调用DAO层,DAO层应该由service层调用,action层调用service层。
vb520530 2012-01-26
  • 打赏
  • 举报
回复
麻烦大家帮忙看看~ 我急啊~~~~~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧