最近,我读到了很多关于JBoss Seam的好东西,但我仍然没有遇到过使用它的人。从我所读到的内容来看,似乎SEAM是JSF的下一步发展。
因此,我的问题是:对于那些使用过SEAM的人,您是否遇到了任何缺点?您会说在使用它时感觉自然吗?
我在一个大型的IceFaces项目中使用了Seam。与使用纯JSF相比(参见Damo在前面几个答案中发布的链接)Seam确实更好。
但是,我记得有以下一些问题:
Facelets<ui:repeat>
JSTL<c:forEach>
JSF<h:form>
ICEFaces<ice:selectOneMenu>
JSF<f:selectitems>
Seam<s:button>
这样说“Seam是JSF的下一步”是不正确的。Seam并不需要使用JSF作为视图层,它也可以使用Wicket或GWT。
但是,当与JSF一起使用时,它可以很好地简化JSF。你需要比标准JSF更少的XML配置,并且我经常忘记JSF没有像对话上下文或EL中的参数化方法调用这样的东西。例如:
<h:commandButton action="#{myBean.sayHello('damo')}" value="hello"/>
它易于使用,而且可以在任何地方使用POJOs非常令人解放。它最大的缺点与JSF相关:
s:button/link
并不能总是解决)有足够的页面详细说明了JSF的缺点elsewhere(请注意,这些不是对Seam的批评-而是对JSF1.x的批评,许多问题已在JSF2.0中得到解决)
我不认为Seam是JSF的“下一步”,但如果您计划立即使用JSF1.x,则Seam和Facelets至关重要。
我认为JSF2.0和WebBeans是下一步。对我来说,使用注释感觉很自然,使生活更加轻松。我甚至无法想象使用getAttribute/getParameter框架工作。一个缺点是seam-gen目前还不能与Maven一起使用(但Seam3将基于Maven)。我认为Seam让你专注于你想要实现的内容,而其他框架则需要考虑如何实现。你有没有尝试过使用javascript/prototype/jquery进行Ajax?相比之下,与seam Ajax按钮和方法调用以及重新渲染相比,这真的很痛苦。在seam和Rich Faces中,真的不需要使用Javascript,对我来说,这是我使用过的最好的框架。
我喜欢JSF,不久前我评估了Seam。JSF是一个Web UI框架,而Seam是一个更通用的Web应用程序框架,它集成了不仅JSF,还有会话上下文、工作流(jBPM)和对象持久性(最好是EJB3)。我最初被Seam宣传的自动生成脚手架所吸引,但我从未能够将其与我的企业数据模型配合使用。从那时起,我对Spring Framework和Spring JSF越来越感兴趣。它吸引我的是更模块化,如果您使用iBATIS,它只需要像Tomcat这样的Servlet容器,而不是像JBoss这样的Java EE容器。Spring已经存在更长时间,并且拥有更大的思维共识。
此外,ICEfaces与JSF和facelets非常搭配,无论是否使用Seam或Spring等应用程序框架都可以完美运行。
Seam作为一个集成框架,当与其他你想使用的框架配对时,真正展现了它的实用性。
如果你已经在使用EJB和JSF,那么SEAM就是一个杀手级的选择。
如果你将使用JSF(加上任何相关工具,如IceFaces或RichFaces),那么SEAM POJOs也可以简化你的设置,并让你访问Seam提供的生命周期状态(conversation等)。
如果你正在使用EJB与Wicket或GWT,Seam也可能能够帮助你节省一些配置,尽管我个人没有在这种配置中使用过它。
正如所说,Seam的缺点在于任何抽象框架都固有的问题:它会隐藏细节。如果它开始泄漏,你就会遇到麻烦。我还没有遇到过泄漏的情况,但我花了时间给自己一个良好的基本理解,包括EL如何与Seam注释等配合工作。
无论你是否会发现Seam有用,取决于你将要使用它的框架。Seam绝对有其优势,而且这个优势正在不断增长。Seam绝对不是一个死项目。 :)
您可以始终使用工厂注解
来避免反复调用同一方法。工厂允许更新组件。