我正在将我的项目从CodeIgniter切换到Spring
我可以在CodeIgniter中做的事情是按顺序加载多个视图并创建一个新视图
例如,假设<head>
标记内的所有内容在所有页面中都是相同的,<title>
除外。我可以简单地$this->load->view('header', $header_data);
header
表示视图名称,$header_data
表示包含标题值的数组。
在Spring中,我的控制器会执行以下操作
@Controller
@RequestMapping("/")
public class IndexController
{
@RequestMapping(method = RequestMethod.GET)
public String index(ModelMap model)
{
model.addAttribute("title", "Home");
return "index";
}
}
我似乎无法像使用php那样单独加载页眉,正文和页脚,而且我无法将不同的变量传递到每个单独的视图中。
我有什么方法可以在春天这样做吗?任何示例或链接都将非常感激。
答案 0 :(得分:1)
在Java世界中,从一个或多个模板生成页面(视图)。模板(通常)是一个文件,例如JSP,HTML,XHTML等。大多数应用程序需要页面遵循某种常见布局,例如页眉,页脚,侧边栏等。这可以通过使用来实现一些模板用于描述布局,然后使用特定于页面的模板来呈现实际的页面内容。使用这种方法,页面之间常见的任何内容(具有相似的布局)都在布局模板中编码,然后由特定于页面的模板填充。
可以使用两种不同方法之一 - Decoration
或Composition
来实施布局。您(需要)使用哪种方法取决于您使用的view technology(并且有太多的方法)。例如,如果您使用基于纯JSP的模板,则可以使用<jsp:include />
包含来自其他模板的常用页面元素,这是Composition
的一种形式,因为视图是撰写各种模板。 FreeMarker和Velocity是另外两种提供基于Composition
布局的常用视图技术。相比之下Tiles,SiteMesh和Thymeleaf提供基于Decoration
的布局,其中页面模板只是声明他们使用的布局和框架然后装饰页面具有共同布局元素的内容。
您应该尝试一些框架来确定您最熟悉的框架。从您提供的示例中,您可能会更好地使用基于Decoration
的框架,如Tiles,SiteMesh或Thymeleaf,因此您可能希望首先探索这些框架。
答案 1 :(得分:0)
使用Spring MVC,您并没有锁定特定的视图技术。这与你的问题有什么关系,这意味着你可以将Spring MVC与Apache Tiles集成一个免费的开源模板,简化用户界面的开发。
这是一篇包含示例源的好文章,解释了集成和好处http://java.dzone.com/articles/spring-mvc-tiles-3-integration。简而言之,tile将帮助您定义页面的基本模板,并为您提供通过单个响应交换动态部分的方法。以下示例性图块定义定义了应该是不言自明的模板
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="DefaultTemplate"
template="/WEB-INF/views/template/SiteTemplate.jsp">
<put-attribute name="title" value="Home" />
<put-attribute name="header" value="/WEB-INF/views/template/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/views/template/menu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/WEB-INF/views/template/footer.jsp" />
</definition>
</tiles-definitions>