当前位置: 首页 > 知识库问答 >
问题:

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

严宏旷
2023-03-14
  • 背景:

我有一个支持bean,它有上传方法,可以在上传文件时监听。现在我将这个文件传递给解析器,并且在解析器中对csv文件中存在的行进行验证检查。

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

  • 我的最终目标:

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

  • 正在发生什么:

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

所以在我的解析器中,我没有session信息,从解析器调用日志bean(只是一个带有一些ejb方法的bean),但是在这个日志bean中,我需要session,因为我需要获得初始上下文。

问题

  1. 在JSF中有没有一种方法可以让我在我的日志bean中获得会话,我在我的上传支持bean中有这个会话

我试着做:

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

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

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

共有1个答案

韩征
2023-03-14

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

我从xhtml将参数保存为查询字符串,就像从状态保存一样。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>

在我的logbean中,

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

    }

参考:处理获取参数

 类似资料:
  • 我正在用JSF做一个项目,遇到了以下问题。 当我创建以下跨度时: 它调用这个方法logout() 然而,在页面加载时,跨度内的onClick会被自动调用,如果我这样做: 并刷新页面,会话将无效。 有没有办法从span中调用方法“onClick”?我确实需要它是一个标签,这样我就可以正确使用引导图标元素。我知道onClick通常用于Javascript,但它与JSF一起使用似乎是合乎逻辑的。 编辑与

  • null null null 道: 处理与业务逻辑层的所有交互的非bean对象。它加载数据bean并准备提交,等等。我通常把它作为一类公共静态方法。 转换器、验证器: null 这似乎是一般JSF应用程序所需的全部内容。我已经阅读了以下内容:http://java.dzone.com/articles/making-distinctions-between,以及这里的回复:JSF backing

  • 我通过JSONP获取一个值到我的网页。现在我想用这个值更新一个支持bean属性?如何处理?提前谢谢。 更新:好的,我的问题是有JavaScripts、JSF Ajax调用和Webservices,我必须看看什么时候触发了哪个动作。我想我需要更详细地描述我的处境。 我的支持bean: 我的xhtml页面: 我的Javascript文件: 页面渲染后我有三个阶段。preSaveCaseButton应该

  • 我对如何在两个模型之间传递数据有疑问。 所以我想把状态从单元传递到主模型,并在那里进行反应。例如发送请求。

  • 问题内容: 假设我有一个模型Car,该模型在 ViewModel1中 实例化为以下初始属性: ViewModel1 然后,我需要在下一个视图控制器中完成汽车的其他信息。遵循MVVM时,在视图控制器之间传递模型的 正确 方法是什么? 使用MVC,操作很简单,因为视图可以引用模型: 以下是对该问题的伪尝试,但是我给人的印象是视图模型应该是私有的,并且只能由单个视图控制器访问。因此,以下尝试对我来说似乎

  • 问题内容: 假设我有一个实体类,汽车。 我的IDE使我可以从实体类自动生成会话bean,因此最终得到了CarFacade 我也可以生成JSF托管bean 我可以理解Entity类和其他Bean之间的有意义的区别,但是无状态会话Bean和托管Bean之间有什么区别?我读到无状态会话Bean用于实现在实体上运行的业务逻辑,而托管Bean用于通过在托管Bean上使用网页调用方法并进行托管Bean调用来与