如何不用iframe和ajax来重复加载页面
来源:互联网 发布:股票短线王软件 编辑:程序博客网 时间:2024/06/05 16:25
前几天,遇到一个问题,查了很久的百度,一点思绪都查不到。我的问题是这样的:
问题概述
我下了一个bootstrap的后台模板。然后准备把它整合到我的java web项目里。结果发现,每个页面的heard和左边的导航菜单都是重新加载的。也就是说,你后台要跳转一个页面,就必须重新加载一个含有左边导航栏的jsp,这就导致很多代码的重复。也增加了后期维护的困难性。
方法一
我使用过一种方法,那就是使用iframe,在页面中的contain中先放置一个iframe,然后再将要加载的页面加载到iframe中。这样确实能实现我刚刚的需求。但是使用iframe会遇到很多问题。具体会遇到什么问题我就不多说了,百度一下就好了。或者自己亲身尝试一样。
方法二
还有一种方式,那就是用ajax来加载一个页面。这样做的坏处就是,我不能使用jstl的一些标签来将数据显示在页面里面。后来也把这种方法给否定掉了。
方法三(推荐方法)
后来网上有个框架能很好的解决这个问题,那就是使用sitemesh.
SiteMesh的介绍就不多说了,主要是用来统一页面风格,减少重复编码的。
它定义了一个过滤器,然后把页面都加上统一的头部和底部。
需要先在WEB-INF/lib下引入sitemesh的jar包:http://wiki.sitemesh.org/display/sitemesh/Download 。这里使用2.4版本。
过滤器定义:
在web.xml中
<filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
decorators.xml文件:
WEB-INF下新建decorators.xml文件:
<?xml version="1.0" encoding="utf-8"?><decorators defaultdir="/WEB-INF/layouts/"> <!-- 此处用来定义不需要过滤的页面 --> <excludes> <pattern>/static/*</pattern> </excludes> <!-- 用来定义装饰器要过滤的页面 --> <decorator name="default" page="default.jsp"> <pattern>/*</pattern> </decorator></decorators>
不用过滤/static/目录下的文件,然后指定了装饰器:/WEB-INF/layouts/default.jsp。
default.jsp:
<%@ page contentType="text/html;charset=UTF-8"%><%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/decorator" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><c:set var="ctx" value="${pageContext.request.contextPath}" /><!DOCTYPE html><html><head><title>QuickStart示例:<sitemesh:title/></title><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><meta http-equiv="Cache-Control" content="no-store" /><meta http-equiv="Pragma" content="no-cache" /><meta http-equiv="Expires" content="0" /><link type="image/x-icon" href="${ctx}/static/images/favicon.ico" rel="shortcut icon"><link href="${ctx}/sc/bootstrap/2.3.0/css/bootstrap.min.css" type="text/css" rel="stylesheet" /><link href="${ctx}/sc/jquery-validation/1.11.0/validate.css" type="text/css" rel="stylesheet" /><link href="${ctx}/css/base/default.css" type="text/css" rel="stylesheet" /><script src="${ctx}/sc/jquery/jquery-1.9.1.min.js" type="text/javascript"></script><script src="${ctx}/sc/jquery-validation/1.11.0/jquery.validate.min.js" type="text/javascript"></script><script src="${ctx}/sc/jquery-validation/1.11.0/messages_bs_zh.js" type="text/javascript"></script><sitemesh:head/></head><body> <div class="container"> <%@ include file="/WEB-INF/layouts/header.jsp"%> <div id="content"> <sitemesh:body/> </div> <%@ include file="/WEB-INF/layouts/footer.jsp"%> </div> <script src="${ctx}/sc/bootstrap/2.3.0/js/bootstrap.min.js" type="text/javascript"></script></body></html>
首先引入了SiteMesh标签。
会自动替换为被过滤页面的title。
会把被过滤页面head里面的东西(除了title)放在这个地方。
被过滤的页面body里面的内容放在这里。
在content的上下引入了header和footer。
我们在头部引入了js和css,就可以重用了。
使用:
使用的过程中,几乎感受不到SiteMesh的存在。例如下面的页面:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><!-- 第一个被装饰(目标)页面 --><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>被装饰(目标)页面title</title><script type="text/javascript" src="/js/hello.js"></script></head><body> <h4>被装饰(目标)页面body标签内内容。</h4> <h3>使用SiteMesh的好处?</h3> <ul> <li>被装饰(目标)页面和装饰页面完全分离。</li> <li>做到真正的页面复用,一个装饰页面装饰多个被装饰(目标)页面。</li> <li>更容易实现统一的网站风格。</li> <li>还有。。。</li> </ul></body></html>
这就是一个普通的页面,但是被SiteMesh装饰之后,就会自动去掉 等元素,然后把相应的东西放在模板对应位置上。
总结:
SiteMesh配置简单,使用灵活,几乎不会影响我们的正常开发,作为一个默默无闻的好帮手,非常推荐使用。
- 如何不用iframe和ajax来重复加载页面
- 不用iframe实现在一个页面内加载另一个页面
- 不用ajax的局部页面跳转实现方法(iframe)
- 检测iframe标签加载完成。可用来做loading页面
- 栏目跳转 用iframe加载页面 ajax加载页面在div中
- iframe页面缓存加载
- iframe重复加载的问题
- 不用XMLHttpRequest来模仿AJAX
- 如何让iframe使用父页面的js文件,不用每次去服务器做请求
- 使用ajax来实现页面的局部加载
- html嵌套iframe如何实现等iframe页面加载完进行下一步调用
- 页面加载时创建iframe
- IFrame和Ajax比较
- IFrame和Ajax比较
- 不用iframe在一个页面中包含另外一个页面
- 如何使用IFRAME来实现类似Ajax的技术----远程脚本
- Ajax加载页面如何刷新地址栏URL的问题
- 如何使用Holmos处理页面等待ajax加载
- Linux用户登录记录日志和相关查看命令汇总
- Spring框架之基础类—AttributeAccessorSupport抽象类
- 开发框架-Spring-错误或异常时返回统一的json格式
- HTML中的密码框
- CMake基础篇---构建可执行文件
- 如何不用iframe和ajax来重复加载页面
- 《阿里巴巴Java开发规约》插件Eclipse版使用指南
- 集群之 -- rabbitmq
- python爬取 热门小说
- ROS中launch file基本介绍
- JVM调优之jstack找出最耗cpu的线程并定位代码
- 数据库中不支持中文,将默认的gbk格式调整成utf-8格式
- java千万级数据txt文件导入数据库
- L