【问题标题】:Passing session between jsf backing bean and model在 jsf 支持 bean 和模型之间传递会话
【发布时间】:2012-06-27 20:52:34
【问题描述】:
  • 背景

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

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

  • 我的最终目标

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

  • 发生了什么

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

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

问题

  1. 在 JSF 中有没有办法,我可以在我的 logging bean 中获得 session,我在我的 upload backing bean 中拥有?

我试过了:

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

session 的值是null,更一般的问题是:

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

【问题讨论】:

    标签: java session jsf


    【解决方案1】:

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

    我将参数保存为来自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

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 2011-06-09
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 2012-03-16
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多