作为一名java Web应用程序开发人员,我去年使用JSF(SUN)作为我的Web应用程序的框架。我不得不说我非常喜欢使用它,它使开发变得更容易。
最近,我已经阅读了很多关于JBoss Seam的好东西,但我还没有遇到过使用它的人。根据我的阅读,似乎SEAM是JSF的下一步。
因此,对于使用过SEAM的人,我的问题是:当你使用这项技术时,你遇到了什么缺点?你会说你觉得这很自然吗?
答案 0 :(得分:27)
任何框架(如SEAM或Grails)的优势在于它是更高级别的抽象。它会为您提供潜在的细节,如果设计和编写得好,可以使事情变得更容易。
任何框架(如SEAM或Grails)的缺点是它隐藏了很多细节。如果你还没有了解到底下发生了什么,如果你遇到困难并且对你生成的代码一无所知,你会发现自己陷入了困境。
另一个缺点是,他们在模型中构建的假设可能并不总是您想要的。但改变它们意味着打破他们为你准备的道路,这并不容易。
我的建议是使用框架并欣赏它带来的好处,但不要以它们为借口停止学习下面发生的事情。是没有框架可以手工编写整个事物的人,但选择使用它来提供杠杆。
答案 1 :(得分:10)
我在与IceFaces一起进行的大型项目中使用了Seam。 Seam肯定比使用普通的JSF要好得多(请参考Damo发布的链接以上几个答案)。
然而,我记得一些问题:
Facelets< ui:repeat>
JSTL< c:forEach>
JSF< h:form>
ICEFaces< ice:selectOneMenu>
JSF< f:selectitems>
Seam< s:button>
答案 2 :(得分:6)
说“Seam是JSF的下一步”是不正确的。 Seam不必使用JSF作为视图层。它也可以使用Wicket或GWT。
然而,当与JSF一起使用时,它可以很好地简化它。您拥有的XML配置比标准JSF少,我经常忘记JSF没有像EL中的对话上下文或参数化方法调用那样的东西。例如:
<h:commandButton action="#{myBean.sayHello('damo')}" value="hello"/>
它易于使用,并且在任何地方使用POJO的能力都非常自由。与JSF相关的最大缺点是:
s:button/link
并不总能解决)有足够多的页面详细说明了JSF elsewhere的缺点(注意这些不是对Seam的批评 - 而不是JSF1.x,而且很多都是在JSF2.0中解决的)
我不相信Seam是JSF的“下一步”,但如果你现在计划使用JSF1.x,那么它和Facelets是至关重要的。
答案 3 :(得分:2)
答案 4 :(得分:1)
我感觉很自然,使用注释可以让生活更轻松。我甚至无法想象使用getAttribute / getParameter框架。一个缺点是seam-gen不能与Maven一起使用(但是Seam3将基于Maven)。我认为Seam让你专注于你想要实现的目标,而你必须考虑如何去做其他框架。你有没有试过用javascript / prototype / jquery做Ajax?与使用方法调用的seam Ajax按钮和reRender的内容相比,这真的很痛苦。使用seam和Rich Faces完全不需要Javascript。对我而言,这是我用过的最好的框架。
答案 5 :(得分:1)
我喜欢JSF,不久前我评估了Seam。 JSF是一个Web UI框架,而Seam是一个更通用的Web应用程序框架,它不仅集成了JSF,还集成了会话上下文,工作流(jBPM)和对象持久性(最好是EJB3)。我第一次被广告中自动生成的脚手架吸引到Seam,但我从来没有让它与我的企业数据模型一起工作。从那时起,我对Spring Framework和Spring JSF越来越感兴趣。它吸引我更模块化,如果你使用iBATIS,它只需要一个像Tomcat这样的servlet容器,而不是像JBoss这样的Java EE容器。春天已经存在了很长时间,并且有更多的思想分享。
对于JSF和facelets来说,ICEfaces也很棒,无论是否有像Seam或Spring这样的应用程序框架,它都可以很好地工作。
答案 6 :(得分:1)
作为一个集成框架,Seam在与您想要使用的其他框架配对时,确实会显示其实用性。
如果你将要使用EJB和JSF,那么SEAM就是杀手锏。
如果您要使用JSF(以及任何相关工具,如IceFaces或RichFaces),SEAM POJO可以简化您的设置,并让您访问seam提供的生命周期状态(对话)等等。)
如果您正在使用带有Wicket或GWT的EJB,Seam也可能会为您节省一些配置,但是,我没有亲自在此配置中使用它。
正如前面所说,Seam的缺点是任何抽象框架都固有的:它隐藏了你的细节。如果它开始泄漏,你就麻烦了。我还没有泄漏它,但我也花时间给自己一个很好的,基本的理解它是如何工作的。 EL如何与Seam Annotations等配合使用。
您是否要找到有用的接缝取决于您将要使用它的框架。 Seam肯定有它的甜蜜点,但那个地方正在增长。 Seam肯定不是一个死的项目。 :)
答案 7 :(得分:0)
您始终可以使用Factory annotation
来避免一遍又一遍地调用相同的方法。 Factory允许更新组件。