这是我所拥有的:
Java类(添加用户):
public String addUser() throws NoSuchAlgorithmException { HttpSession currentSession = request.getSession(); User u = new User(); u.setUname(getUserName()); u.setPassword(StringHash(getUserPass())); u.setUtype(getUserType()); plResponse = iUserDAO.addUser(u); setActionMessage(plResponse.getMessage()); currentSession.setAttribute("actionMessage", this.actionMessage); return SUCCESS; }
Java类(添加关联):
public String saveAssoc() throws Exception { HttpSession currentSession = request.getSession(); try { plResponse = iUserDAO.saveUserAssoc(currentSession.getAttribute("selectedUser").toString(), countryId, langId); refreshUserAssociations(); setActionMessage(plResponse.getMessage()); currentSession.setAttribute("actionMessage", this.actionMessage); } catch (Exception e) { throw new Exception(e.getMessage()); } return SUCCESS; }
JSP(两种情况相同):
<s:if test="actionMessage != null && actionMessage != ''"> <div class="successMessage"> <br/><s:property value="actionMessage"/> </div> <br /> </s:if>
我有两种情况将返回消息传递到页面。添加用户之后,以及添加用户关联之后。在这两种情况下,参数都正确地传递给了会话(我调试了代码),但是仅在第一种情况(添加用户)中显示了该参数。第二种情况假装好像会话中没有actionMessage。
可能是什么原因?
实际上,第一种情况和第二种情况都不显示来自会话的消息。它在值堆栈中查找变量。在第一种情况下,您具有操作属性getter,该属性返回一个值。在第二种情况下,它可能不是相同的值。在动作类中使用会话的正确方法是实现SessionAware通过servletConfig拦截器注入到动作bean属性的会话映射。然后使用该映射而不是http会话。请参阅我们如何访问该会话。
SessionAware
servletConfig
public String addUser() throws NoSuchAlgorithmException { ~~HttpSession currentSession = request.getSession();~~ Map currentSession = ActionContext.getContext().getSession(); User u = new User(); u.setUname(getUserName()); u.setPassword(StringHash(getUserPass())); u.setUtype(getUserType()); plResponse = iUserDAO.addUser(u); setActionMessage(plResponse.getMessage()); ~~currentSession.setAttribute("actionMessage", this.actionMessage);~~ currentSession.put("actionMessage", getActionMessage()); return SUCCESS; }
在JSP中,您可以从上下文访问会话对象。
<s:if test="#session.actionMessage != null && #session.actionMessage != ''"> <div class="successMessage"> <br/><s:property value="#session.actionMessage"/> </div> <br /> </s:if>