1

这是我所拥有的:

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会话。

可能是什么原因?

4

2 回答 2

1

实际上,第一种情况和第二种情况都没有显示来自会话的消息。它在值堆栈中查找一个变量。

在第一种情况下,您拥有返回值的操作属性 getter。在第二种情况下,它可能不是相同的值。

在动作类中使用会话的正确方法是实现SessionAware通过servletConfig拦截器将会话映射注入动作 bean 属性。

然后使用该地图而不是 http 会话。请参阅我们如何访问会话

public String addUser() throws NoSuchAlgorithmException {    
    Map currentSession = ActionContext.getContext().getSession();
    User u = new User();
    u.setUname(getUserName());
    u.setPassword(StringHash(getUserPass()));
    u.setUtype(getUserType());
    plResponse = iUserDAO.addUser(u);
    setActionMessagee(plResponse.getMessage(currentSession.put("actionMessage",getActionMessagee()));
    return SUCCESS; 
}

在 JSP 中,您可以从上下文访问会话对象。

<s:if test="#session.actionMessage != null && #session.actionMessage != ''">
    <div class="successMessage">
    <br/><s:property value="#session.actionMessage"/>
    </div>
    <br/>
</s:if>
于 2014-07-16T20:56:41.300 回答
0

要访问存储在会话中的属性,请使用以下代码:

<s:property value="%{#session.actionMessage}" />

检查访问属性标签页面中的范围对象以查看更多详细信息。

于 2014-07-16T20:04:02.840 回答