我正在寻找从头开始创建新的应用程序,并且可能会使用Spring MVC和Spring Web Flow。Spring Roo创建的项目使用Spring MVC和Web Flow(可选)。对于视图技术,有哪些好的替代方案?或者采用Spring的JSP和JSTL标签库以及jQuery是可行的选择?
我正在寻找从头开始创建新的应用程序,并且可能会使用Spring MVC和Spring Web Flow。Spring Roo创建的项目使用Spring MVC和Web Flow(可选)。对于视图技术,有哪些好的替代方案?或者采用Spring的JSP和JSTL标签库以及jQuery是可行的选择?
Answers:
我最近开始使用纯HTML和jQuery在Spring MVC中进行演示,仅创建JSON视图。
到目前为止,它运行得很好,即使我必须执行JavaScript工作,它也可以与我的设计师进行更轻松的交互,并且在他进行更改时可以更快地进行周转,因为我不必将他的HTML转换为我的JSP。评审团对现场的整体可维护性尚无定论。
您可以在Spring MVC上拥有任意数量的视图技术。我有FreeMarker和JSP视图解析器。当我遇到一个在FreeMarker中过于复杂(或者在JSP中更加方便)的视图时,我创建了一个JSP视图。例如,带有JSTL的Spring可以很好地处理表单。为此,我使用了JSP视图,但是对于几乎所有其他内容,我都有FreeMarker视图。
基本上,请参阅Spring MVC文档以了解如何配置多个视图解析器:
<bean name="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
<property name="order" value="1"/> <!--NOTICE THE ORDER-->
</bean>
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="2"/> <!--NOTICE THE ORDER-->
</bean>
Spring 3文档还建议使用FreeMarker。Freemarker速度快(据我所知),并具有诸如绑定之类的Spring功能的集成。
Spring MVC提供了与许多不同视图技术的集成。我建议使用FreeMarker或Velocity。
虽然这是一个古老的问题,但我认为我将提供一个新兴的替代方案Scalate。
Scalate是模板选项中的强大工具。唯一的问题是Scalate需要很多依赖关系(虽然它需要Scala,但不需要您用Scala编写)。
我目前最喜欢的是确实具有Spring集成的Handlebars.java。
(我以前的回答在这里过时了。)Freemarker至少和Velocity一样好。但是Thymeleaf看起来更加引人注目,再加上布局方言,它可能使sitemesh和tile这样的模板框架变得不必要。对于JSF,Thoughtworks的批评似乎是正确的:
我们继续看到团队在使用JSF(JavaServer Faces)时遇到麻烦,并建议您避免使用此技术。团队似乎选择JSF是因为它是Java EE标准,而没有真正评估编程模型是否适合他们。我们认为JSF有缺陷,因为JSF的编程模型鼓励使用其自身的抽象,而不是完全拥抱底层的Web模型。像ASP.NET Webforms一样,JSF尝试在顶级HTML标记和无状态HTTP协议上创建有状态的组件树。JSF 2.0和2.2的改进,例如无状态视图的引入和GET的推广,都是朝着正确方向迈出的一步,甚至可以承认原始模型存在缺陷,但是我们觉得这太迟了。
您还可以在Spring MVC的View层中使用Angular(客户端框架)。
我的建议是不要看上面大部分内容中未描述的视图框架,因为它会导致回发等问题,这意味着您将无法从该视图技术提交数据并从服务器获取响应。例如验证之类的编辑数据提交,将刷新服务器中的数据。
这是因为以上视图技术中的Java Bean不使用Spring容器生命周期。您将只能将它们用于纯视图示例无状态请求。JSF的示例,您将无法使用回发,因为jsf回发仅在使用jsf生命周期时有效,并且如果您将spring框架JSF视图解析器与spring mvc一起使用,则将无法进行回发,因此您需要替换jsf servlet控制器代替spring mvc控制器。
同样,由于您对整个项目的要求尚不明确,并且如果您不希望回发任何要求,则可以使用上述一些选择。
基于zk框架的zk mvc是写在spring mvc之上的一种示例视图技术,您可以在其中扩展ZK GenericForwardComposer的spring mvc控制器以处理事件。您始终可以使用Spring框架使用Spring来处理这些控制器的生命周期。
您可以在Google上找到类似的其他产品。
该审查基于框架生命周期的高级设计。
祝一切顺利 !!!