Spring MVC集成Struts Tiles使用方法
系統
2019-08-29 22:21:00
1549 0
首先,我們定義一個總體的tiles視圖?/tiles/mainTemplate.jsp
首先使用:<tiles:getAsString name="title"/>打印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
>
??
<!--
-以courseDetail命名的配置,覆蓋了模板中的title和content對應的頁面->
??<definition?name="courseDetail"?extends="template">
????<put?name="title"?value="courseDetail?title"/>
????<put?name="content"?value="/tiles/courseContent.jsp"/>
??</definition>
</tiles-definitions>
/title/courseContent.jsp
<%
...
@?taglib?uri
=
"
http://jakarta.apache.org/struts/tags-tiles
"
?prefix
=
"
tiles
"
?
%>
<
html
>
<
head
>
</
head
>
<
body
>
this?is?courseContent
??
</
body
>
</
html
>
spring配置文件:
?
<?
xml?version="1.0"?encoding="UTF-8"
?>
<!
DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"?
>
<
beans
>
<
bean?
id
="simpleUrlMapping"
?class
="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
>
?
<
property?
name
="mappings"
>
???
<
props
>
???????
<
prop?
key
="/tiles.mvc"
>
TilesController
</
prop
>
???
</
props
>
?
</
property
>
</
bean
>
<
bean?
id
="TilesController"
?class
="Action.TilesHomeController"
>
</
bean
>
<!--
?tiles頁面解析器
-->
?
<
bean?
id
="viewResolver"
?class
="org.springframework.web.servlet.view.InternalResourceViewResolver"
>
??
<
property?
name
="viewClass"
>
????
<
value
>
org.springframework.web.servlet.view.tiles.TilesView
</
value
>
??
</
property
>
</
bean
>
<!--
?tiles配置器
-->
<
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使用方法
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】 元
喜歡作者