【问题标题】:How to print session attributes in JSP with Struts 2如何使用 Struts 2 在 JSP 中打印会话属性
【发布时间】:2021-03-21 12:47:05
【问题描述】:

这是我所拥有的:

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

可能是什么原因?

【问题讨论】:

    标签: java jsp session struts2 actioncontext


    【解决方案1】:

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

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

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

    然后使用该地图而不是 http 会话。见How do we get access to the session

    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>
    

    【讨论】:

    • Map 与 ServletActionContext.getRequest().getSession() 返回的 HttpSession 对象不兼容;
    • 是的,我只是在阅读一些文档。 HttpSessionput 方法吗?我不这么认为,可能是putValue?已弃用。
    【解决方案2】:

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

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

    查看Accessing scoped objects in property tag 页面了解更多详情。

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2011-11-08
      • 2015-12-11
      • 2011-09-12
      相关资源
      最近更新 更多