JSP for Spring MVC视图层的替代方案

问题描述 投票:76回答:16

我想从头开始创建一个新的应用程序,可能会使用Spring MVC和Spring Web Flow。 Spring Roo创建的项目使用Spring MVC和Web Flow。什么是视图技术的一些很好的替代品,或者是带有Spring和JSTL taglib和jQuery的JSP的方法?

java jsp spring-mvc
16个回答
49
投票

在标准Java EE API中,JSP的唯一替代方法是Facelets。到目前为止(2010年),JSF是唯一本机支持Facelets的MVC框架。

Spring MVC支持开箱即用的JSP,但它有一个可配置的view resolver,无论如何都允许你使用Facelets。其他候选者是第三方模板框架,如VelocityFreemarkerThymeleaf,可以配置为Spring MVC的视图技术。 Spring文档包含带有Velocity和Freemarker的integration examples


3
投票

我正在使用velocity和Spring MVC。此外,我在Googles App引擎上托管我的应用程序,我没有任何问题。


3
投票

您还可以在Spring MVC中为View层使用Angular(客户端框架)。


2
投票

我的建议不是看看上面大部分内容中描述的视图框架,这些框架没有写在spring MVC之上,因为你最终会遇到像回发这样的问题,这意味着你将无法从这个视图技术中提交数据并从服务器获取响应。例如验证,编辑数据提交,使用来自服务器的数据刷新将无法正常工作。

这是因为视图技术上面的一些java bean不使用Spring容器生命周期。您将只能将它们用于纯视图示例无状态请求。使用JSF的例子你将无法使用回发,因为jsf回发仅在你使用jsf生命周期时才有效,如果你使用Spring框架JSF视图解析器与spring mvc你将无法做回发所以你需要替换jsf servlet控制器代替spring mvc控制器。

再次,因为您的完整项目要求不明确,如果您不想要回发要求,您可以使用上述一些选项。

一个示例视图技术,写在顶部og spring mvc是基于zk框架的zk mvc,您可以在其中扩展您的spring mvc控制器从ZK GenericForwardComposer来处理事件。您始终可以使用Spring来使用Spring框架处理这些控制器的生命周期。

你可以谷歌找到类似的其他产品。

该评论基于框架生命周期的高级设计。

祝一切顺利 !!!


2
投票

我认为Tiles可以帮助你。 您可以定义模板并在里面使用JSTL。


1
投票

您可以在Spring Webflow上运行Facelets


1
投票

怎么样phpj

它可以用作视图模板,也可以从头开始构建Web服务器系统

我做了phpj,因为我不想更新我的应用程序并一直用tomcat加载它,所以有了这个,我可以使用静态位置为我的Web应用程序使用类似apache的配置


1
投票

Apache Velocity是Java Server Pages的一个很好的替代品。


51
投票

我最近发现了Thymeleaf

它看起来是JSP的完全替代品,并与Spring MVC集成。模板方法看起来更像HTML,对UI设计者来说可能更适合。他们有一个小写,比较两个solutions并排。


17
投票

我最近开始使用纯HTML和jQuery进行演示,只使用Spring MVC创建JSON视图。

到目前为止,它还是很顺利,即使我必须完成javascript工作,它还可以让我更轻松地与我的设计人员进行交互,并且当他进行更改时更快的周转时间,因为我不必将他的HTML转换为我的JSP。评审团仍然对整体网站的可维护性有所了解。


15
投票

您可以在Spring MVC上拥有任意数量的视图技术。我有freemarker和JSP视图解析器。当我遇到一个在Freemarker中太复杂的视图(或者在JSP中更方便)时,我创建了一个JSP视图。例如,Spring JSLT在处理表单方面做得很好。为此,我使用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>

15
投票

Springs documentation也建议Freemarker。 Freemarker是(据我所知)快速并且具有一些Spring功能的集成,如绑定。


9
投票

Spring MVC提供了与许多不同的view technologies的集成。我建议使用FreeMarkerVelocity


8
投票

虽然这是一个古老的问题,但我认为我会提供一个崭露头角的替代品,即Scalate

Scalate是模板选项中的强者。唯一的可能性是Scalate需要很多依赖(虽然它需要Scala,但它不需要你在Scala中编写)。

我目前最喜欢的是Handlebars.java,它确实有Spring集成。


5
投票

(我之前的回答是在这里过时了。)Freemarker至少和Velocity一样好。但Thymeleaf看起来更引人注目,与布局方言一起,它可能会使像sitemesh和tiles这样的模板框架变得不必要。对于JSF,Thoughtworks' criticism似乎有效:

我们继续看到团队使用JSF - JavaServer Faces遇到麻烦 - 并且建议您避免使用这种技术。团队似乎选择了JSF,因为它是一个Java EE标准,没有真正评估编程模型是否适合它们。我们认为JSF存在缺陷,因为它的编程模型鼓励使用自己的抽象而不是完全接受底层Web模型。与ASP.NET webforms一样,JSF尝试在顶级HTML标记和无状态HTTP协议上创建有状态组件树。 JSF 2.0和2.2的改进,例如无状态视图的引入和GET的推广,是朝着正确方向迈出的步骤,甚至可能是对原始模型存在缺陷的认可,但我们觉得这太晚了。我们建议团队使用简单的框架并与Web技术(包括HTTP,HTML和CSS)紧密配合,而不是处理JSF的复杂性。


3
投票

我一起使用Stripes和Spring。 Stripes在大部分时间都不会让你失望,但是当你需要的时候,它会很好地增加Spring。

© www.soinside.com 2019 - 2024. All rights reserved.