在jsf支持bean和模型之间传递会话

时间:2012-06-26 13:58:57

标签: java session jsf

  • 背景

我正在使用具有上传文件的上传方法的支持bean。现在我将此文件传递给解析器,并在解析器中对csv文件中存在的行进行验证检查。

如果验证失败,我必须记录信息并保存在数据库中的日志记录表中。

  • 我的最终目标

是在日志记录bean中获取会话信息,以便我可以获取initialContext并调用ejb来将数据保存到数据库。

  • 发生了什么

在我的上传支持bean中,我正在进行会话,但是当我调用解析器时,我不传递会话信息,因为我不希望解析器依赖于会话,因为我想单独测试解析器。

所以在我的解析器中,我没有session信息,解析器正在调用logging bean(just a bean with some ejb methods)但是在这个日志记录bean中,我需要会话,因为我需要获取initial context

问题

  1. 在JSF中有没有办法,我可以在我的session logging bean中获得upload backing bean
  2. 我尝试过:

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

    session值为null,更通用的问题是:

    1. 如何在模型bean或其他bean中获取会话信息 是从我们有会话的支持bean中引用的吗?
    2. 我们在jsf中是否有通用方法可以访问会话 整个JSF应用程序的信息?

1 个答案:

答案 0 :(得分:0)

所以我做了什么来解决这个问题,

我将参数保存为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 bean中,

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);

    }

参考:Processing Get Parameters