可用的JSF MVC组件

时间:2011-09-13 19:37:25

标签: java jsf web-applications java-ee

我是基于Java的Web编程的新手,我正在尝试从头开始学习JSF。我听说JSF解释为一个完整的MVC解决方案,Facelets是一个纯XML技术,包含MVC架构的“View”组件。

所以,不知道任何更好的东西,这让我想问:每个组件有哪些选择/替代方案?对于3(模型,视图和控制器)中的每一个,存在哪些工具/ API /库/技术将与JSF一起使用。例如,如果正确理解View基础知识,那么JSP是Facelets的一种(旧的/过时的)替代方法。还有其他人? Model组件怎么样:那里有什么选择?控制器?

再次,只是感兴趣将所有内容保留在JSF的保护伞下:如果该组件兼容JSF解决方案,我想听听它!

感谢您的任何建议!

2 个答案:

答案 0 :(得分:6)

我很惊讶BalusC已经完成了一个令人作呕的完整答案。我怀疑他会绕过它,当他这样做时,我会投票支持它,因为它会很棒,所以不要马上接受我的回答。与此同时,这里有一些想法:

JSF意味着完整的MVC堆栈,重点是VC。你有JSP / Facelets正确。简单地说,不要使用JSP。使用Facelets。它们是JSF 2的默认视图技术。它们基于xml,可以防止您通过JSF生命周期和JSP生命周期之间的“有趣”交互来伤害自己。

您将编写java类和导航规则以填充JSF中的控制器角色。您可以将JSF托管bean用于您的服务,或者您可以使用其他一些框架(如Spring),但您将实现特定的类以用作JSF中的控制器。

至于模型......好吧,任何好的MVC框架都会将模型留给自己。模型不应该知道或关心它所处的视图。希望您可以使用模型并使用从JSF到Wicket到Vaadin的任何内容将其显示在网页中,然后在桌面应用程序或基于RESTful JSON的基础上使用它。 API。

以下是我建议您了解JSF的一些链接

答案 1 :(得分:3)

我认为你的理解是正确的。

我会说JSF填充了控制器的大部分内容。还有其他库与JSF兼容。例如,您可以将Spring WebFlow与JSF一起使用,以获得更强大的导航功能。

JSF在模型方面并不是非常具有侵入性。理想情况下,您在域模型中没有使用JSF的任何痕迹(例外情况是JSF提供了您可以选择使用的注释,例如@ManagedBean)。这意味着您可以自由使用任何所需的库。如果需要,可以使用Spring IOC或EJB,或者可以在普通的旧java对象中编写整个模型。

话虽如此,我想强调JSP并不过时。正如digitaljoel指出的那样,Facelets已经取代JSP作为JSF中的视图技术,但JSP在其他框架中仍然存在并且健康。没有一个协议,包括Facelets的JSF比JSP(与另一个Web框架一起)“更好”;而JSF尚未成为行业标准。

使用JSF编写Web应用程序更接近于编写桌面应用程序,因为它们已经抽象掉了大部分请求 - 响应处理。每次客户端发出请求时都没有调用特定方法,而是每个请求都经过您无法完全控制的生命周期。不鼓励直接与HttpServletRequest交互。

忽略Web的请求 - 响应特性会增加请求的复杂性并与另一个增长趋势发生冲突:严重依赖于Javascript的丰富Web应用程序。视图逻辑的职责从服务器移动到浏览器,浏览器使用Ajax与瘦HTTP API交互服务器。

关键是JSF并不是你需要学习和忽略其他一切的最终框架。它可能是某些应用程序的正确选择,但并非适用于所有应用程序。