今天寫(xiě)coding的時(shí)候發(fā)現(xiàn)一個(gè)問(wèn)題。郁悶。Action執(zhí)行過(guò)一次之后,第二次請(qǐng)求竟不再次執(zhí)行Action。這讓人非常郁悶。
代碼是這樣的:
public String login() {
UserinfoDto user = biz.login(account, password);
if (user == null) {
// TODO 用戶名/密碼錯(cuò)誤
this.addActionError("用戶名/密碼錯(cuò)誤,請(qǐng)重新登陸。");
return "input";
}
// TODO 登陸成功
request.setAttribute("user", user);
return "loginSuccess";
}
biz是利用Spring注入的業(yè)務(wù)對(duì)象。如果登陸成功則沒(méi)什么。但是一次登陸失敗后。以后的每次都登陸失敗。惱火。改用ActionMessage。可以了。但是每失敗依次都會(huì)增加一個(gè)message。我才想到。原來(lái)Action并沒(méi)有被消除。可能Struts2對(duì)已經(jīng)有ActionError的對(duì)象就不再訪問(wèn)。而直接返回錯(cuò)誤頁(yè)面。這里我試了一下。第一次發(fā)生錯(cuò)誤之后能返回你定義的頁(yè)面。而以后每次訪問(wèn)則返回"input",不會(huì)再次執(zhí)行Action。所以。而這一切都是因?yàn)锳ction是被 Spring創(chuàng)建的。如果是XWork創(chuàng)建的。每次請(qǐng)求它都會(huì)創(chuàng)建一個(gè)新的Action。就不會(huì)發(fā)生以上問(wèn)題。因?yàn)樾聞?chuàng)建的 Action不會(huì)預(yù)先添加ActionError。解決方案是將Action放在request作用域中。具體做法在 http://blog.csdn.net/wxy_G/archive/2008/01/29/2071662.aspx 有介紹。我就不再贅述了。

文章來(lái)源:http://www.aygfsteel.com/phyeas/archive/2008/07/28/218160.html
代碼是這樣的:











phyeas 2008-07-28 19:56 發(fā)表評(píng)論
文章來(lái)源:http://www.aygfsteel.com/phyeas/archive/2008/07/28/218160.html