如何在 Spring 3.1 应用程序中声明 JSF 托管 bean?

2023-11-24

这是我第一次开发基于 Java EE 架构的应用程序,我正在使用

  • JSF 2.0
  • 春季3.1
  • JPA 2.0

我想请教您一个我有点困惑的问题。我想声明我的 JSF 托管 bean,但有很多解决方案可以处理此约束:

  1. 在 faces-config.xml 中声明 manged bean。
  2. 使用 @ManagedBean 注释覆盖我的控制器。
  3. 使用 @Controller 注释覆盖我的控制器。

我的问题是:这三种解决方案有什么区别?!我应该对我的 ApplicationConfig.java 或/和 web.xml 进行哪些更改?关于 Spring ,我应该在 web.xml 中放置某种监听器吗?

我真的尝试阅读很多教程和示例,但每次我都发现自己受阻!


在集成 Spring 和 JSF 时,您实际上不能成为这两种技术的初学者,因为它们不能很好地协同工作。我给您的第一个也是最好的建议是,在尝试集成 JSF 和 Spring 之前,先阅读几本有关 JSF 和 Spring 的书,并分别真正了解它们。

话虽如此,JSF 是一个基于组件的 Web 框架,重点是 MVC。 Spring 是一个依赖注入和控制反转框架,并不专用于 Web 应用程序。

如果你不明白这三个术语是:

  • 基于组件的网络框架

  • 依赖注入

  • 控制反转

那么我的建议是你停止正在做的事情并立即开始阅读。

集成这两件事的主要问题是两个框架之间需要解决的职责存在一些重叠。 JSF 作为一个独立的框架维护其自己的托管 bean 的范围,而不需要单独的 DI 框架。然而引入Spring的时候自然会出现冲突。 Spring 除了 JSF 之外还管理自己的 Bean,因此要引用这些 ManagedBean 并将业务对象或 DAO 正确注入其中以供使用,JSF ManagedBean 需要成为 Spring 控制器。

您可以使用以下方式声明 JSF ManagedBean@Controller注解。 Spring 3 足够聪明,可以识别出它是一个 JSF 托管 bean,并且 bean 名称将是为 ManagedBean 声明的名称。

@Controller
@Scope("session")
@ManagedBean(name="testBean")

现在这个问题已经解决了,下一个问题是 JSF 实现中附带的令人讨厌的 EL Resolver。 EL Resolver 基本上就是这样做的,它解析 XHTML/JSF 页面上遇到的 EL 表达式。引用时testBean但是,它将无法正确解析该名称,因为它引用该名称的 JSF 托管 bean,并且无法找到包含您需要的所有 Spring 注入依赖项的 Spring 控制器。

Spring 3 通过为您提供一个自定义 EL 解析器来代替与 JSF 实现捆绑在一起的解析器来解决这个问题。您可以声明它用于faces-config.xml

<application> 
   <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application>

现在终于:

我应该在 web.xml 中放置某种侦听器吗?

如果您只是集成 JSF + Spring,而不需要任何其他 Spring 控制的 Servlet 或不需要 Spring Security 集成,那么no你不需要任何额外的东西web.xml。您只需要声明 FacesServlet 及其上下文参数,以及您的情况可能需要的任何其他第三方组件库 servlet。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring 3.1 应用程序中声明 JSF 托管 bean? 的相关文章

随机推荐

  • 从 iPhone 应用程序购买实体产品,无需 Apple 在应用程序内购买

    iPhone 应用程序是否可以允许用户从应用程序内部购买实体产品 例如笔或鼠标 而无需在应用程序购买中使用 Apple 苹果允许吗 如果是的话 你知道有什么API支持这个吗 谢谢 阿杰 您不得使用 应用内购买 销售实体商品或服务 因为通过此
  • DatePicker 看起来也像新 API 上的旧设计

    所以问题很简单 我集成了一个DatePicker在我的应用程序中 不作为DialogDatePicker但作为一个 View 组件 更准确地说是一个View里面的一个Fragment动态显示并从FrameLayout包含在我的主要Fragm
  • XML XSD 模式验证工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有人知道使用 XSD 模式验证 XML 的命令行工具吗 xmllint 来自Libxml项目 xmllint schema schema xsd d
  • recyclerview 中的倒计时器无法正常工作

    我创建了一个包含多个数据和一个倒计时器的回收视图 所有的事情都工作正常 直到我无法滚动列表 当我向下滚动列表时 倒计时器将与上面的视图项目冲突 它也计算当前观看时间和随机时间 我尝试了太多的方法来解决它 但无法解决 请帮帮我 提前致谢 这是
  • 为什么我无法克隆我作为协作者的私有存储库

    我是一个私人 github 存储库的合作者 我可以分叉它 但是当我尝试将它克隆到我的系统上时 它会显示一个弹出框 要求提供凭据 即使我输入正确的凭据 我也无法登录 是只有我一个人还是 github 实际上不允许克隆私人仓库 即使我是其中的合
  • 在 Windows 上启动 Git Bash 时运行 SSH 代理

    我正在使用 git bash 我必须使用 eval ssh agent exe ssh add my ssh location 每次当我开始一个新的 git bash 时 有没有办法永久设置ssh代理 或者windows有什么好的办法吗 管
  • 对字符串的迭代器进行排序

    我有一个字符串迭代器 为了排序 我需要从中创建一个列表并使用它对其进行排序Collections sort list 有没有简单的方法来对迭代器进行排序 迭代器不是容器 它是遍历容器元素的实用程序 因此 如果您只能访问迭代器 则无法更改由该
  • 从字符串中分离出整数

    假设我有一个网页 当前通过 url 参数接受单个 ID 值 http example com mypage aspx ID 1234 我想改变它以接受listid 像这样 http example com mypage aspx IDs 1
  • Spring Data JPA 调用 Oracle 函数

    我正在运行一个简单的应用程序 它使用 Spring Boot Spring Data JPA 来实现持久性 下面是一个示例 Oracle 函数 我希望在服务实现类中返回值 CREATE OR REPLACE PACKAGE PKG TEST
  • 我正在尝试计算 txt 文件中的所有字母,然后按降序显示

    正如标题所说 到目前为止 这就是我的代码确实可以工作的地方 但是我无法按顺序显示信息 目前它只是随机显示信息 def frequencies filename infile open filename r wordcount content
  • 使用 matplotlib 绘制 PNG 文件时反转颜色

    I m trying to display a PNG file using matplotlib and of course python For this test I ve generated the following image
  • 使用 fetch 时文本响应为空

    以下代码 fetch http localhost 8080 root 1487171054127 k query bearer token mode no cors credentials include then function re
  • 获取 Cython 指针的值

    我正在编写一个构造 malloc 的函数unsigned char 数组 然后返回指针 在纯 Cython 或 C 中 这很容易 您所要做的就是在函数上设置返回类型 然后返回指向数组的指针 完毕 但是 我已经达到了需要将指向在 Cython
  • debugByteArray 和 copyPixelsToBuffer 不起作用。 SkImageDecoder::Factory 返回 null

    我有一个类 TouchPoint 实现了 Serialized 因为它包含 Bitmap 所以我为该类编写了 writeObject 和 readObject private void writeObject ObjectOutputStr
  • “绿色线程”和Erlang的进程有什么区别?

    在阅读了 Erlang 的轻量级进程之后 我非常确定它们是 绿色线程 直到我读到绿色线程和Erlang进程之间存在差异 但我不明白 实际差异是什么 绿色线程可以直接在它们之间共享数据内存 尽管当然需要同步 Erlang 不使用 绿色线程 而
  • 一次性计算精度、召回率和 F 分数 - python

    准确度 精确度 召回率和 f 分数是机器学习系统中系统质量的衡量标准 它取决于真 假阳性 阴性的混淆矩阵 给定一个二元分类任务 我尝试了以下方法来获得返回准确度 精确度 召回率和 f 分数的函数 gold 1 0 9 predicted 1
  • .unsubscribe 和 .take(1) 之间的区别

    我想知道 使用之间的性能是否有任何差异 take 1 and unsubscribe when unsubscribe订阅后立即使用 var observable Rx Observable interval 100 First var s
  • Express:从内容类型“application/json; charset=utf-8”中删除 charset=utf-8

    我有一个基于 NodeJS 和 Express 的应用程序 每次我试图获取响应时 我都会得到Content Type application json charset utf 8 我无法在前端解析它 因为我期待带有标头的响应Content
  • 声纳想要关闭流[重复]

    这个问题在这里已经有答案了 我有下一个代码 private Stream
  • 如何在 Spring 3.1 应用程序中声明 JSF 托管 bean?

    这是我第一次开发基于 Java EE 架构的应用程序 我正在使用 JSF 2 0 春季3 1 JPA 2 0 我想请教您一个我有点困惑的问题 我想声明我的 JSF 托管 bean 但有很多解决方案可以处理此约束 在 faces config