发表于: 2017-10-23 23:58:46
1 732
今天完成的任务:
1.学习tiles框架
从基本概念开始:tiles
所有网站都有一些共同点:它们由具有相似结构的页面组成。页面共享相同的布局,而每个页面由不同的独立片段组成,但始终位于所有网站上的相同位置。 复合视图模式通过允许创建具有相似结构的页面来形式化此典型用途,其中页面的每个部分在不同的情况下都会有所不同。
官网上有很经典的图,来说明这种结构:按照这种模式,将每一个部分都分开,然后固定每一块的位置,比如头放在header中。
按照上面的说法的话,如果我需要从第一页跳转到第二页这样就只需要修改body的部分,而其他的不变,这样我可以改变了页面。那么使用这种布局结构,一些相同的页面部分就可以重复利用,这样也可以保持界面的一致性。
这样的话tiles就可以理解成,将一个界面拆开分成几个小界面,然后再把需要的组装到一起就可以。省去了重复的输入一些重复的部分。
2.学习了tiles概念需要将其用到自己的项目中。
首先需要添加依赖
然后在Springmvc配置文件中配置tiles的解析器,最好放在Springmvc的viewresolver之前。
<!--tiles的配置文件引入tiles配置文件 -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" >
<property name="definitions">
<list>
<value>/WEB-INF/tiles.xml</value>
</list>
</property>
</bean>
<!-- 配置视图解析器 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.tiles3.TilesView</value>
</property>
</bean>
然后是tiles.xml配置文件。这里面主要是定义了一个模板页,使用template.jsp主要就是用来定义header,footer,body应该按照什么样的格式来放置。那么其他界面就可以根据规定的格式来讲每个部分组合起来。也不会乱。
<?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="*.page" template="/jsp/template.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/jsp/header.jsp" />
<put-attribute name="menu" value="/jsp/menu.jsp" />
<put-attribute name="body" value="/jsp/body.jsp" />
<put-attribute name="footer" value="/jsp/footer.jsp" />
</definition>
</tiles-definitions>
接下来需要新建几个jsp文件分别放置需要的header,footer,body,以便其他的界面调用。
最后就是在controller中写上方法,然后返回值中需要写上XXX.page(这里是在tiles.xml中配置好了的规定返回格式。可以自己定义)。
这样的话在浏览器中输入controller的方法名的时候,就会返回一个XXX.page,然后springMVC中的tiles视图解析器会首先进行拦截后缀是.page的返回值。并且使用规定的模板来显示。
下面是展示的结果。
基础的测试搞好了以后,就该修改自己项目,首先将头和尾先提取出来分别放到界面中。
依赖,SpringMVC配置文件,tiles.xml,模板页。都配置好以后,首先建立header.jsp,footer.jsp,body.jsp并且将界面中的头,尾,身体分别抽取到相应的jsp中。剩下的就是进行拼接。在tiles.xml中首先写入header,footer,body。
<?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="template" template="/jsp/template.jsp"/>
<!--这里是定义一个模板页,使用的格式就是template界面的格式-->
<definition name="*.page" extends="template">
<!--这里是继承模板页,并且将我们抽出来的头和尾放入其中。-->
<put-attribute name="header" value="/jsp/header.jsp"/>
<put-attribute name="body" value="/jsp/{1}.jsp"/>
<!--这里是用来匹配返回的XXX.page界面{1}这里将会获取到返回的XXX,
然后去匹配相应的jsp作为body插入-->
<put-attribute name="footer" value="/jsp/footer.jsp"/>
</definition>
</tiles-definitions>
这样启动项目就可以实现tails拼接了。
3.中间碰到的几个问题。
界面拼接后样式不显示。
是因为拼接后路径css文件路径有问题。另外在footer中需要加入<footer></footer>标签。
body拼接后不能从数据库获取数据。
因为需要从传出数据的Controller中返回相应body的(文件名.page)
怎么使用一个继承页来显示出几个拼接的body。
就是使用<put-attribute name="body" value="/jsp/{1}.jsp"/>这句话来匹配Controller返回的字符串的名字比如是task8-home.page,然后会获取到task8-home这一段,放在{1}的位置 ,在将对应的jsp传入到body中,将body拼接进去就可以了。
需要将Controller的处理方法改成对应的方法。
明天计划 :
明天继续做任务四,然后尽量交任务吧。
遇到问题:
上面提到的各种问题,各种问大佬。
收获:
学习了tiles框架,然后搞出了拼接界面。
禅道:
http://taskNaNteng.com/zentao/task-view-10338.html
评论