0
  • 背景

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

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

  • 我的最终目标

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

  • 发生了什么

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

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

问题

  1. 在 JSF 中有没有一种方法可以让我得到sessionlogging bean的我的upload backing bean

我试着做:

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

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

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

1 回答 1

0

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

xhtml我将参数保存为来自like from的查询字符串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);

    }

Reference: Processing Get Parameters

于 2012-07-03T15:12:16.810 回答