2011-06-21 179 views
0

我开始一个新的JSF(2)项目。我意识到纯JSF有一些限制,我打算在春天下降。 JSF是一个在春季比较新的方法(甚至没有一个标签弹出面临在stackoverflow :-)),jsp是经典的方式。
我需要技术堆栈的最佳可用调整。
1)我是否也需要使用弹簧网页流?
2)是否可以使用弹簧面(这似乎是Web流的一部分)+ spring mvc + JPA?
3)有没有这种配置的好例子?没有弹簧流动的弹簧面

回答

3

我使用JSF 2连同弹簧3依赖注入等

我不熟悉的Web流量,我不使用它。

在你的faces-config.xml你可以注册春季SpringBeanFacesELResolver

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

然后,您可以在JSF代码中访问Spring受管Bean!

看看Spring documentationAPI docs

+0

所以你不使用弹簧面,但普通的jsf 2,没有文件上传,安全等。 – AgostinoX

+0

不,我们不使用弹簧面。 (我甚至不知道这是什么...)我们也使用PrimeFaces,它有一个文件上传组件:http://www.primefaces.org/showcase/ui/fileUploadHome.jsf。我们仍然处于项目的开始阶段,所以我不能告诉你,我们将如何处理安全问题...... – Sebi

1

如果您在应用程序中没有沉重的向导专用视图,我怀疑您实际上需要使用SWF。

最简单的解决方案实际上就是Sebi告诉你的 - 注册Spring EL Resolver,并用适当的原型(最常见的是@Controller)和期望的范围标记你的控制器类。从那里开始,您应该能够通过手动或自动装配获得对Spring管理的bean的引用。这就是它 - 没有faces-config.xml豆类管理,也没有“双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就有一个令人讨厌的功能/ bug,它不会呈现视图并且已经有gott en在第五阶段没有抛出任何异常或报告任何有用的东西(这个问题在1.8.2-GA版本的IceFaces中得到修复,如果没有购买许可证,这个问题就无法得到解决)。

编辑:我基本上注意到一个类似的SO线程here

+0

谢谢,非常有帮助。我可以绑定一个简单的“bean”而不是@Controller吗? – AgostinoX

+0

我不确定我是否理解这个问题 - 如果您需要从控制器访问Spring管理的bean,则可以通过'@ Autowired'或其他任何首选方式(如我的答案中所示)执行此操作。如果您问是否可以从视图访问非托管类,我不这么认为,除非您的意思是混合使用JSF IoC和Spring容器 - 我无法想象为什么会这样。无论如何,我会说通过控制器公开模型值的最佳方式是通过控制器,所以为什么你会从视图中访问非托管bean? – quantum