什么是MVC.NET的@Html.Action方法的Spring Web等价物?

时间:2014-07-24 03:26:31

标签: java .net spring-mvc razor

让我先说明一下:我对学习Spring感兴趣,而且我有扎实的JSF和MVC.NET / Razor背景。

我正试图在Spring的网络方面加快速度,我正在寻找与Razor模板中的@Html.Action调用相当的东西。基本上我想这样做:

//Route
  http://myserver/url/{int} => returns <html><body>Url (int)</body></html>

//Example Code (Pseudo Razor)
@for(in i = 0; i < 5; i++)
{
  <tr>
     <td>@Html.Action("url", new { @id=i})</td>
  <tr>
}

//Output I'd like to see
...
  <tr>
    <td><html>... Url 1 ...</html></td>
  </tr>
  <tr>
    <td><html>... Url 2 ...</html></td>
  </tr>
  <tr>
    <td><html>... Url 3 ...</html></td>
  </tr> 
  <tr>
    <td><html>... Url 4 ...</html></td>
  </tr>
  <tr>
    <td><html>... Url 5 ...</html></td>
  </tr>

有人能指出我正确的方向吗?我上周一直在寻找这个答案,我觉得我的术语都错了。

1 个答案:

答案 0 :(得分:2)

Spring MVC没有自己的视图渲染技术。但是,它提供了与基于Java的常见视图渲染器的集成。在.NET世界中,我们最常使用常规ASP.NET模板或Razor模板来从Web应用程序提供Web页面。同样,在Java世界中,我们可以访问JSP,JSTL,FreeMarker,Velocity,HTTL,Scalate,Mustache,Thymeleaf,JSF等技术。

您发布的示例类似于从模板内部调用可重用的代码段。然后,Java世界中的确切替代依赖于您正在使用的视图技术。以下是一些例子:


FreeMarker的

<#macro action id><html><body>Url ${i}</body></html></#macro>

<#list 1..5 as i>
<tr>
  <td><@action i /></td>
</tr>
</#list>

速度

#macro ( action $i )<html><body>Url $i</body></html>#end

#foreach ( $i in [1..5] )
<tr>
  <td>#action($i)</td>
</tr>
#end

Thymeleaf

<html th:fragment="action(i)"><body>Url ${i}</body></html>

JSP

您必须创建一个标记库并为此公开标记。这比上面的示例更难,因为标记是Java类,并使用标记库描述符公开。标记类包含要呈现的HTML,因此意味着HTML代码分散在JSP文件和Java类中。


希望这会有所帮助。如果您需要更多信息,了解您正在使用的视图技术将会很有帮助。