簡體   English   中英

在jsf支持bean和模型之間傳遞會話

[英]Passing session between jsf backing bean and model

  • 背景

我有支持bean,它具有在文件上傳時監聽的上載方法。 現在,我將此文件傳遞給解析器,並在解析器中對csv文件中存在的行進行驗證檢查。

如果驗證失敗,我必須記錄信息並保存在數據庫的記錄表中​​。

  • 我的最終目標

是在日志bean中獲取會話信息,以便可以獲取initialContext並調用ejb將數據保存到數據庫。

  • 發生了什么事

在我的上載支持bean中,正在獲取會話,但是當我調用解析器時,我不傳遞會話信息,因為我不想解析器依賴於會話,因為我想分別對解析器進行單元測試。

所以在我的解析器中,我沒有session信息,從解析器開始調用logging bean(just a bean with some ejb methods)但是在此日志記錄bean中,我需要會話,因為我需要獲取initial context

  1. 在JSF中,有沒有一種方法可以使我的logging bean中的sessionupload backing beansession

我試着做:

FacesContext ctx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) ctx.getExternalContext().getSession(false);

session值是null ,更籠統的問題是:

  1. 如何在模型Bean或其他具有會話的支持Bean中引用的Bean中獲取會話信息?
  2. jsf中是否有通用方法,可以使用它在整個JSF Application中訪問會話信息?

所以我為解決這個問題做了什么

我將參數保存為xhtml查詢字符串,例如status.xhtml

<h:link outcome="Log" value="${result.id}">
                <f:param name="jobid" value="${result.id}"/>
                <f:param name="userid" value="${result.userId}"/>
            </h:link>

現在在我的log.xhtml ,我有

<f:metadata>
<f:viewParam name="jobid" value="#{bean.jobId}"/>
<f:viewParam name="userid" value="#{bean.userId}"/>
</f:metadata>

在我的log豆中,

public void init()
    {
        String userId1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("userid");
        String jobId1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("jobid");
        userId = Long.parseLong(userId1);
        jobId = Long.parseLong(jobId1);

    }

參考: 處理獲取參數

暫無
暫無

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

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