作者:zackcoolgirl_497 | 来源:互联网 | 2023-09-13 13:33
首先,我们定义一个总体的tiles视图 /tiles/mainTemplate.jsp 首先使用:打印tiles配置文件中定义的字符串属性title
首先,我们定义一个总体的tiles视图 /tiles/mainTemplate.jsp
首先使用:打印tiles配置文件中定义的字符串属性title
然后是分别加载header,content,footer三个jsp页面,共同组成mainTemplate.jsp
<%
...
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-tiles
"
prefix
=
"
tiles
"
%>
<
html
>
<
head
>
<
title
><
tiles:getAsString
name
="title"
/>
title
>
head
>
<
body
>
the title is:
<
tiles:getAsString
name
="title"
/><
br
>
<
tiles:insert
name
="header"
/><
br
>
<
tiles:insert
name
="content"
/><
br
>
<
tiles:insert
name
="footer"
/><
br
>
body
>
html
>
header.content.footer页面如下:
<
html
>
<
head
>
head
>
<
body
>
this is from header
body
>
html
>
<
html
>
<
head
>
head
>
<
body
>
this is from content
body
>
html
>
<
html
>
<
head
>
head
>
<
body
>
this is from footer
body
>
html
>
Spring MVC 控制类:
package
Action;
import
java.util.ArrayList;
import
java.util.List;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
model.Student;
import
org.springframework.validation.BindException;
import
org.springframework.web.servlet.ModelAndView;
import
org.springframework.web.servlet.mvc.AbstractCommandController;
public
class
TilesHomeController
extends
AbstractCommandController
...
{
protected
ModelAndView handle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, BindException arg3)
throws
Exception
...
{
return
null
;
}
protected
ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1)
throws
Exception
...
{
return
new
ModelAndView(
"
courseDetail
"
,
""
,
""
);
}
}
当我们运行上面这个控制器时候,系统会自动去寻找courseDetail.jsp这个文件,但我们还没有定义这个文件,所以,我们要这样写tiles-def.xml
DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"
>
<
tiles-definitions
>
<
definition
name
="template"
page
="/tiles/mainTemplate.jsp"
>
<
put
name
="title"
value
="default title"
/>
<
put
name
="header"
value
="="
/tiles/header.jsp"
/>
<
put
name
="content"
value
="/tiles/content.jsp"
/>
<
put
name
="footer"
value
="/tiles/footer.jsp"
/>
definition
>
<
bean
id
="viewResolver"
class
="org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<
property
name
="viewClass"
>
<
value
>
org.springframework.web.servlet.view.tiles.TilesView
value
>
property
>
bean
>
<
bean
id
="tilesConfigurer"
class
="org.springframework.web.servlet.view.tiles.TilesConfigurer"
>
<
property
name
="definitions"
>
<
list
>
<
value
>
/WEB-INF/train-def.xml
value
>
list
>
property
>
bean
>
beans
>
运行/title.mvc (mvc是我自定义的扩展名)我们可以看到如下结果:
courseDetail title
this is from header
this is courseDetail
this is from footer
如果我们需要在每一个页面的header部分显示一些我们从数据库里读取的数值,我们可以在不同的控制器中加入访问数据库的代码,但这样显得很啰唆,因为header部门在每个页面都是公用的,也就是说不同的页面只有content部分不同,这样,我们就会有很多冗余代码,未解决这个问题,我们可以使用spring为我们提供的ComponentControllerSupport
package
Action;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
model.Student;
import
org.apache.struts.tiles.ComponentContext;
import
org.springframework.web.servlet.view.tiles.ComponentControllerSupport;
public
class
HeaderTilesController
extends
ComponentControllerSupport
...
{
protected
void
doPerform(ComponentContext context, HttpServletRequest request,
HttpServletResponse response)
throws
Exception
...
{
Student stu
=
new
Student();
stu.setName(
"
gaoxiang
"
);
stu.setSex(
"
male
"
);
//
tiles context中存放简单数据
context.putAttribute(
"
name
"
, stu.getName());
context.putAttribute(
"
sex
"
, stu.getSex());
//
tiles context中存放对象
context.putAttribute(
"
student
"
, stu);
//
request中存放数据
request.setAttribute(
"
requestname
"
, stu.getName()
+
"
-request
"
);
request.setAttribute(
"
requestsex
"
, stu.getSex()
+
"
-request
"
);
}
}
改写train-def.xml
DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"
>
<
tiles-definitions
>
<
definition
name
="template"
page
="/tiles/mainTemplate.jsp"
>
<
put
name
="title"
value
="default title"
/>
<
put
name
="header"
value
=".header"
/>
<
put
name
="content"
value
="/tiles/content.jsp"
/>
<
put
name
="footer"
value
="/tiles/footer.jsp"
/>
definition
>
<
definition
name
="courseDetail"
extends
="template"
>
<
put
name
="title"
value
="courseDetail title"
/>
<
put
name
="content"
value
="/tiles/courseContent.jsp"
/>
definition
>
<
definition
name
=".header"
page
="/tiles/header.jsp"
controllerClass
="Action.HeaderTilesController"
>
definition
>
tiles-definitions
>
改header.jsp
<%
...
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-tiles
"
prefix
=
"
tiles
"
%>
Spring MVC集成Struts Tiles使用方法