我必须为我工作的公司做一个小的概念验证。我查看了 Spring MVC 3 和 Tapestry 5。
对于那些没有使用 Tapestry 的人来说,它有非常好的 UI 流约定,例如。按下按钮或跟随链接。您的 Page 类中的所有内容都是 ThreadLocal 也很好,因此您不必担心该级别的并发性。
另一方面,我不喜欢 Tapestry 对 Ajax 的支持。它有自己的标签用于执行 ajax 操作(区域等),但很难做到
$.ajax({
url: "tapestry_page",
success: function(result) {
// do something with json result
}
});
因为Tapestry 接受的返回类型。你说你的项目将是丰富的 javascript,这可能意味着很多 ajax。仅出于这个原因,我会选择Spring。您可以只注释您的@Controller
方法,@ResponseBody
并且您返回的任何内容都将直接写入响应的正文。这对于直接编写 json 或 xml 很有用(在大多数情况下,它是由 Jackson 或 JAXB 自动生成的)。
对于 Spring,最大的好处是它是一个非常成熟的项目,所以你需要的一切,可能有人在你之前需要它,并且有可用的解决方案(Tapestry 并非如此,但 Spring 存在更多文档)。
Spring 的一些负面影响:它与 Servlet 的方式非常紧密地耦合,doGet
并且doPost
表单处理之类的事情不像Tapestry 的表单生命周期那样紧密地完成。如果您正在执行大量同步操作,Tapestry 的 Page 概念非常好,并且可能是要走的路。
我不确定 Tapestry 是否已经达到了可以在没有 xml 的情况下配置整个应用程序的地步,但是 Spring 做到了。这对你来说可能是一个优势。
我的 2 美分。