簡體   English   中英

如何使用 Struts 2 在 JSP 中打印會話屬性

[英]How to print session attributes in JSP with Struts 2

這是我所擁有的:

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攔截器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>

要訪問存儲在會話中的屬性,請使用以下代碼:

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

檢查訪問屬性標記頁面中的范圍對象以查看更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM