我不是JSF的粉丝。 Spring MVC对我来说很有意义,我过去也曾使用它。
你能不能把它说出来,或提供将它很好地融入JEE6并与CDI分享和陷阱的技巧。
我不介意只为MVC提供应用程序上下文,但是如果我在我的MVC控制器中使用@Inject或@EJB,会出现什么问题呢?
Seam3看起来很有趣但是它已经准备好投入生产了吗?
答案 0 :(得分:3)
另一种选择是使用JAX-RS作为控制器(使用Jersey实现,您可以将控制权转发给JSP),并使用JSP作为您的视图。这样您就不必担心将Spring与Java EE集成。
例如,你可以有一个HomeController:
@Path("/")
@Stateless
public class HomeController {
@Context
HttpRequest request; // Injects request object so you set attributes.
@EJB // Inject your EJB
EmployeeServiceLocal employeeService;
@GET
public Viewable getHomePage() {
Employee employee = employeeService.getEmployee();
request.setAttribute("employee", employee);
return new Viewable("/home.jsp", null);
}
}
这将引导您进入名为home.jsp的JSP,并且您将能够通过请求对象获取JSP上的数据。请注意,JAX-RS用于RESTful Web服务,因此要了解下面代码中发生的情况,您必须了解REST。
答案 1 :(得分:2)
你能说出来吗或提供将它很好地融入JEE6并与CDI分享和陷阱的技巧
也许我错了,但我认为你不得不在CDI和Spring的DI部分之间做出选择,其中一个必须负责创建魔法发生的对象。因此,如果您想将CDI与Spring MVC一起使用,您必须制作控制器CDI bean。来自JavaOne 2010 : Java EE 6 Panel "What do we do now?" notes:
SpringMVC和CDI? =>技术上可行:使用CDI bean作为控制器(但Reza表示他们没有看到对SpringMVC做足够的工作需求)。
我也热烈建议您查看Java EE 6 (CDI / EJB 3.1) XOR Spring Core Reloaded。
我不介意只为MVC提供应用程序上下文,但是如果我在我的MVC控制器中使用@Inject或@EJB,会出现什么问题呢?
Spring提供了内置的support of "at inject" from JSR-330,并为@EJB提供了一些魔力。如果这就是你想要的,那么Spring会起作用。但这不是CDI(JSR-299)给你的。
答案 2 :(得分:1)
Using CDI from Spring解释了如何使用BeanFactoryPostProcessor构建CDI-to-Spring桥接器,该桥接器将所有bean从CDI BeanManager导入Spring应用程序上下文。
Pascal说你必须在Spring DI和CDI之间做出选择,但是通过这种方法你可以选择每个模块。
在典型的WAR布局中,有一个Web模块在WEB-INF / lib中使用了许多服务和持久性模块。使用CDI-to-Spring桥,您可以将WEB-INF / lib模块转换为CDI bean存档,而Web模块不是一个bean存档,只使用Spring DI。
网桥通过JNDI访问CDI BeanManager,并为每个CDI bean创建一个Spring工厂bean。
我正在为您的用例精确地使用这个桥:将Spring MVC Web前端与Java EE 6后端集成。