发表于: 2017-10-20 23:21:45

1 769


今日完成:

学习tiles..

  Apache Tiles是一个JavaEE应用的页面布局框架。Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局。布局由可以复用的多个块组成,每个页面可以有选择性的重新定义块而达到组件的复用。 

  tiles 框架彻底揭示了 jsp:includes 内部的概念 ―― 从而允许您更灵活地创建可重用的页面。使用 Tiles 框架,开发人员能够通过组合可重用的 tile 来构建页面。您应该将 tile 看作是可视组件。

  Tile 布局是允许在其上放置其他 tile 的特殊 JSP 页面。 Tile 布局控制了 tile 在页面上的放置位置。从许多方面看来,tile 布局都和模板布局类似。事实上,如果以前使用过 Struts,那么您会注意到 Tile 框架与模板自定义标签库向是后兼容的。

  从某些方面看来,tile 布局工作起来就像一个显示函数。要使用某个 tile 布局,可使用 tiles:insert 标签来调用它。调用 tile 布局时要向它传递参数。这些参数将成为该 tile 布局的属性;例如,参数将放入 tile 范围。

  调用 tile 时传递的参数可以是其他 JSP 页面或 Web 资源,您可以将它们插入布局中的预定义位置(称为 区域)。参数还包含能够插入 tile 布局的字符串。事实上,可以将许多类型的对象作为参数传递给 tile。这些参数会成为仅对该 tile 可用的 tile 范围内的属性。

  tile 范围 类似页面范围,因为 tile 范围比请求范围更特殊化。 tile 范围允许 tile 用户给 tile 传递参数(称为属性)。tile 范围允许您传递仅对该 tile 布局或 tile 可用的变量(称为属性)。 特殊自定义标签允许您将属性从 tile 范围复制到页面、请求、会话或应用程序范围,或者将属性作为包含的 Web 资源来显示。

 



因为是页面布局框架,就要先找去找共同点进行抽取

先抽一个头

抽取后,将3个页面的头直接去掉,然后再抽一个底部,这里实在受不了整理了一下css,再将3个页面的底部去掉

这里为了防止发布到服务器产生的404路径问题,对jsp所有href跳转添加绝对路径

${pageContext.request.contextPath}/


OK,分析DB,对象为学生,正常的uuid,name,password根据下图添加学生就业状态,再加一个创建时间好配合步骤2

页面3,添加学生学习类型,前端,后端,移动,整站,运维5种,跳转值页面3时从数据库查询出对应结果

先创建表

create table student(id varchar(50),name varchar(50),password varchar(50),states varchar(20),studytype varchar(30),createtime bigint)

进入task3框架对实例类及映射修改如下

将抽取后的头页面内添加 登录 注册 列表展示 3个连接,这里在每次登录后个给前端传参,使用fmt标签对日期类型进行格式化,代码效果如下

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

登录后

登录前

增删查,没问题后,改出了点毛病,关于select和radio的回显问题,

解决如下

增删改查全部完成,但在列表展示页面时间没有转型

参照该博文http://www.cnblogs.com/gmq-sh/p/5528989.html 使用自定义标签将Long转化成Date类型输出

第一步 写一个类继承TagSupport,实现doStartTag() 方法。 

package cn.ssm.util;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
* 用于页面 jstl时间格式化s
* Created by gmq on 2016/5/24.
*/
public class DateTag extends TagSupport {

private static final long serialVersionUID = 6464168398214506236L;

private String value;

@Override
   public int doStartTag() throws JspException {
String vv = "" + value;
try {
long time = Long.valueOf(vv.trim());
Calendar c = Calendar.getInstance();
c.setTimeInMillis(time);
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String s = dateformat.format(c.getTime());
pageContext.getOut().write(s);
} catch (Exception e) {
e.printStackTrace();
}
return super.doStartTag();
}

public void setValue(String value) {
this.value = value;
}

}

第二步 编写tld文件,datetag.tld,放在tld目录下:

第三步  在web.xml中加入引用:

第四步 在jsp页面开始使用:

<%@ taglib uri="/tags" prefix="date"%>

引入tiles框架开始根据http://blog.csdn.net/u010246789/article/details/52343793

基准模版页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<html>

<body>
<table border="1" cellpadding="2" cellspacing="2" align="center">

<tiles:insertAttribute name="header" />
<tiles:insertAttribute name="body" />
<tiles:insertAttribute name="footer" />

</table>
</body>
</html>

在spring-mvc配置文件中添加

<!-- 引入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>

<!--tiles视图解析器 -->
<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文件



基础测试出现2个问题.

①样式图片加载,全部失败

②注册,登录按钮点击报错500

这里使用如下头部jsp,使用登录注册一样500报错,猜测原因,tiles中配置的视图解析器造成了影响!将所有controller的返回值都经过该视图解析器去匹配tiles.xml中的name.

首先解决了问题②,因为mvc用的习惯一直不配置视图解析器,但那是存在默认视图解析器滴!

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />

那么当我配置tiles的视图解析器后,该默认解析器就不存在了,这里就有点像java的无参构造器一样,你不设置它存在,一旦给了有参构造器它就不存在了.所以controller控制器return的返回值全部被经过该视图解析器后对tiles.xml文件中解析配对!

解决方案如下,配置2个视图解析器,将原默认视图解析器优先级调低,及order的值,该值数字越大优先级越低!这里tiles视图解析器的优先级最高,当tiles.xml配置中解析不到该结果时再返回原默认解析器去解析

<!--tiles视图解析器 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.tiles3.TilesView</value>
</property>
<property name="order" value="1"></property>
</bean>
<!--原默认视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2"></property>
</bean>

测试成功!

上面这个可是大大大大大大的雷点!


但还是样式还是加载不出来.....今天是交不成了...


明日计划: 提交task4


问题:如上


收获:复习了jsp,el,对tiles有了基础的了解!关于aop代理静态方法是能的...怎么实现今天实在是没时间了

cglib完整手写

动态代理完整



返回列表 返回列表
评论

    分享到