【问题标题】:spring faces without spring flow没有弹簧流的弹簧面
【发布时间】:2011-09-19 08:39:10
【问题描述】:

我正在开始一个新的 JSF (2) 项目。我意识到纯 JSF 有一些限制,我打算在春天放弃。 JSF 是 spring 中一种相对较新的方法(stackoverflow 中甚至没有标签 spring-faces :-)),jsp 是经典方法。
我需要对技术堆栈进行最佳调整。
1) 我也需要使用 Spring Web Flow 吗?
2) 仅使用弹簧面(这似乎是 web 流程的一部分)+ spring mvc + JPA 是否可行?
3) 这种配置有什么好的例子吗?

【问题讨论】:

    标签: java spring spring-mvc jsf-2 java-ee-6


    【解决方案1】:

    我将 JSF 2 与 Spring 3 一起用于依赖注入等。

    我不熟悉 Web Flow,也不会使用它。

    在您的faces-config.xml 中您可以注册Spring SpringBeanFacesELResolver

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

    然后您就可以在您的 JSF 代码中访问 Spring 托管的 bean!

    看看 Spring documentationAPI docs

    【讨论】:

    • 所以你不用spring faces,而是纯jsf 2,没有文件上传器,安全等
    • 不,我们不使用弹簧面。 (我什至不知道这是什么……)我们还使用了 PrimeFaces,它有一个文件上传组件:primefaces.org/showcase/ui/fileUploadHome.jsf。我们的项目还处于起步阶段,所以我不能告诉你,我们将如何处理安全问题......
    【解决方案2】:

    如果您的应用程序中没有大量特定于向导的视图,我怀疑您是否真的需要使用 SWF。

    最简单的解决方案实际上是 Sebi 告诉您的解决方案 - 注册 Spring EL Resolver 并使用适当的构造型(最常见的是@Controller)和所需的范围标记您的控制器类。从那里开始,您应该能够通过手动或自动装配获得对 Spring 管理的 bean 的引用。这就是它的全部 - 没有faces-config.xml bean 管理,也没有“双 IoC”开销。一旦它在 Spring 上下文中,托管控制器就可以通过#{}EL-notation 从 facelet 中轻松取消引用。

    例如:

    TestController.java:

    @Controller("myController")
    @Scope("request")
    
    public class TestController {
    
    @Autowired
    private SomeSpringManagedBean someBean;
    
    private String someViewProperty;
    
    public String getSomeViewProperty() {
           return someViewProperty;
    }
    
    public void setSomeViewProperty(String arg) {
           this.someViewProperty = arg;
    }
    
    ......
    
    }
    

    TestView.jspx:

    <p:inputText value="#{myController.someViewProperty}" />
    

    我们已经失去了大约 2 周的时间来尝试将 SWF 与 JSF 1.2 结合起来 - 只是发现一旦我们真正让它与支持 JSF 1.2 的最新版本的 IceFaces 一起工作,IceFaces 就有一个功能/错误所以令人讨厌的是,它根本不会渲染视图,并且在没有抛出任何异常或报告任何有用信息的情况下卡在了第 5 阶段(该问题已在 IceFaces 的 1.8.2-GA 版本中得到解决,如果没有购买许可证就无法获得该问题) .

    编辑:我注意到基本上类似的 SO-thread here

    【讨论】:

    • 谢谢,非常有趣。我可以绑定一个简单的“bean”而不是 @Controller 吗?
    • 我不确定我是否理解这个问题 - 如果您需要从控制器访问 Spring 管理的 bean,您可以通过 @Autowired 或任何其他首选方式进行(如我的回答所示) .如果您问是否可以从视图中访问非托管类,我不这么认为,除非您打算混合 JSF IoC 和 Spring 容器 - 我无法想象您为什么会这样做。无论如何,我会说向视图公开模型值的最佳方式是通过控制器,那么为什么要从视图中访问非托管 bean?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2019-05-03
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2018-04-03
    相关资源
    最近更新 更多