让我先说明一下:我对学习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>
有人能指出我正确的方向吗?我上周一直在寻找这个答案,我觉得我的术语都错了。
答案 0 :(得分:2)
Spring MVC没有自己的视图渲染技术。但是,它提供了与基于Java的常见视图渲染器的集成。在.NET世界中,我们最常使用常规ASP.NET模板或Razor模板来从Web应用程序提供Web页面。同样,在Java世界中,我们可以访问JSP,JSTL,FreeMarker,Velocity,HTTL,Scalate,Mustache,Thymeleaf,JSF等技术。
您发布的示例类似于从模板内部调用可重用的代码段。然后,Java世界中的确切替代依赖于您正在使用的视图技术。以下是一些例子:
<#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
<html th:fragment="action(i)"><body>Url ${i}</body></html>
您必须创建一个标记库并为此公开标记。这比上面的示例更难,因为标记是Java类,并使用标记库描述符公开。标记类包含要呈现的HTML,因此意味着HTML代码分散在JSP文件和Java类中。
希望这会有所帮助。如果您需要更多信息,了解您正在使用的视图技术将会很有帮助。