1.关于保存定制页面的说明
通过前面(一)和(二)已经介绍了定制页面的基本概念与ER模型
相信后台记录下来用户选择的布局、模块是非常简单的,比如使用jQuery脚本监听用户每次的操作,把用户添加的布局、模块插入到后台表里面即可,记录下关键的序号,以及每种布局和模块对应的html模板文件即可
2.关于加载用户定制的页面
前面提到了,每种布局、模块都对应一个html文件,但html文件不太适合输出动态页面
所以此处使用FreeMarker的ftl文件代替html文件:因为FreeMarker的理念就是
模板+数据=输出
前面提到的html文件其实就模板,使用ftl文件代替,更加合适输出动态页面
而后台保存的布局、模块信息,就是数据,所以[模板]+[数据]能输出整个页面
下面介绍几种结合FreeMarker加载用户定制页面的方案
(1)使用FreeMarker的 <#include /> 标签
我们知道 include 标签的强大之处在于,可以“动态的引入模板文件(注意不是“引入动态的模板文件”)
何为动态的引入文件呢,就是我们保存用户的布局和模板时,后台会这样记录一些信息
比如用户在一个页面添加了4个布局:1个通栏,2个左分栏,1个右分栏
页面ID | 布局ID | 布局开始模板 | 布局结束模板 | 布局序号 |
100001 | 100001 | left_begin.ftl | left_right.ftl | 1 |
100001 | 100002 | full_begin.ftl | full_right.ftl | 2 |
100001 | 100003 | left_begin.ftl | left_right.ftl | 3 |
100001 | 100004 | right_begin.ftl | right_right.ftl | 4 |
比如在左分栏布局中添加了2个模块:1个公告资讯,1个轮播广告
布局ID | 模块ID | 模块对应的模板 | 模块序号 |
100001 | 100001 | info.ftl | 1 |
100001 | 100002 | adv.ftl | 2 |
那么根据页面ID,可以查询到布局列表 layoutList,以及每个布局包含的模块列表 moduleList,我们都放入到List中
使用FreeMarker的include动态引入这些模板即可,比如在page对应的ftl模板页面可以这么写:
<#list layoutList as layout>
<#include layout.布局开始模板 />
<#/list>
这样就动态引入的所有布局,然后在每种布局对应的ftl模板页面可以这么写
FreeMarker的强大之处在于:在通过include引入的子页面,仍然可以使用父页面的变量,比如此处的 layout
<#-- 此处的layout是引用父页面的变量 --> <#list layout.moduleList as module> <#include module.模块对应的模板 /> </#list> <#-- 不要忘了把模板的结束标签加进来 --> <#include layout.布局结束模板 />
通过这种方式,就能把用户定制的页面加载出来,处理起来很方便,不需要开发人员做过多的判断!
但是:这种情况下,仅仅是把布局、模块“长什么样子”加载出来了,每个模块对应的业务内容还没出来呢!!!
比如 公告资讯模块,用户添加了两个,而这两个模块对应的ftl模板文件肯定是同“一个”!
既然是“一个”模板文件,自然只适合输出一个模块的内容,那“同一种模块”,添加多个的情况下,就不好输出了!!!
针对这种情况,如果不想把数据和模板绑定到一起,那就在页面加载完之后,使用 ajax 的方式,去请求每个模块对应的业务内容
当然你也可以实现FreeMarker的TemplateModel接口,针对每种模块,定制一个方法,只要传入模块ID:根据模块ID去查询对应的业务内容即可
相关推荐
在探讨JAVA WEB JSF的设计参考方案以及页面布局策略时,我们深入分析了使用JSF进行高效页面设计的方法,尤其关注了两种主流布局方案:利用JSP的`include`功能和集成Tiles框架。这两种方法旨在解决Web应用中页面设计...
EasyUI提供了如"layout"这样的组件,可以快速构建复杂的页面布局,包括北(north)、南(south)、东(east)、西(west)和中心(center)五个区域,方便地实现页面的分栏和伸缩。例如,开发者可以通过以下代码创建...
在传统页面布局中,我们通常会利用相对定位和负外边距(margin)来实现。首先,将body和container元素设置为相对定位,然后将footer设置为绝对定位,并将其底部与容器底部对齐。这种方法适用于内容较少的情况。 ```...
优秀的页面布局是吸引用户、提升网站或应用可用性的重要因素。本文将深入探讨“页面设计”这一主题,特别关注国内主流网页和应用的设计布局,如QQ邮箱、谷歌页面以及360页面。 首先,页面布局是指在网页或应用中对...
动态化方案涉及到的技术能够根据用户的浏览习惯、购买行为等数据动态调整页面布局和内容展示。 2. 组件化布局: 组件化布局是把页面划分为多个独立的、可复用的组件,每个组件都负责页面的一部分功能或显示内容。...
在网页设计领域,CSS3(层叠样式表第三版)是一种强大的工具,它极大地扩展了网页的视觉表现力,同时也提供了更加灵活的页面布局解决方案。本资源“CSS3自适应浏览器页面框架布局代码”旨在帮助开发者创建适应各种...
2. 布局能力动态化:Tangram方案可以动态生成页面布局,提供了多种布局方式,如瀑布流布局、吸顶布局、固定布局等。 3. 组件业务化:Tangram方案将组件作为独立的业务单元,每个组件都可以独立开发、测试和维护。 4....
flexible.js是淘宝提出的解决方案的核心部分,它的作用是动态调整HTML的`<meta name="viewport">`标签以及页面的根元素`<html>`的`font-size`属性,从而实现基于设备宽度的自适应布局。将flexible.js的代码复制到...
在网页设计中,页面布局与滚动条是两个关键的元素,它们共同决定了用户在浏览网站时的体验。页面布局有滚动条,意味着网页的内容超过了单屏显示的范围,需要通过滚动来查看全部信息。这样的设计既有可能是由于内容...
3. **自适应性**:根据不同屏幕尺寸自动调整页面布局。 #### 方案实施 为实现上述目标,本文推荐使用**REM与VW布局相结合**的方式: 1. **REM布局**:基于`html`元素的`font-size`定义元素尺寸,能够实现页面元素...
这种布局将页面划分为三个垂直区域,每个区域内部再分为两列,从而提供了一个灵活且有序的展示空间。下面我们将详细探讨这个布局模式的实现原理、相关技术和注意事项。 首先,HTML(超文本标记语言)是构建网页内容...
### 响应式Web页面布局 #### 一、响应式设计意味着什么? 响应式设计(Responsive Web Design,简称RWD)是一种使网站能够根据用户所使用的设备屏幕尺寸自动调整其布局的技术。它允许设计师和开发者创建出能够在...
在JavaScript中实现动态UI布局是..."UIGrid"可能是一个自定义的解决方案,通过结合JavaScript和CSS Grid来高效地管理页面元素的布局。通过这种方式,我们可以创建出适应性强、交互丰富的用户界面,满足各种需求和场景。
这两个文件是jQuery Layout插件的组成部分,它提供了一个强大的、可自定义的页面布局解决方案。通过这个插件,开发者可以轻松地创建多区域、响应式的页面布局。`jquery.layout.js`是未压缩的版本,适合调试和学习,...
#### 三、调整页面布局的方法 - **改变页边距**:可以通过设置`\oddsidemargin`(奇数页的左边距)、`\evensidemargin`(偶数页的左边距)、`\textwidth`(文本宽度)等参数来调整页边距。 - **调整页面大小**:...
通过快速原型工具,可以快速构建出不同版本的页面布局,进行用户测试,找出最佳设计方案。页面布局.rplib可能是某种快速原型工具保存的库文件,包含了多种预设的布局模板,方便产品经理在设计过程中直接引用和修改。...
本资料包提供了40种不同的XHTML页面布局方案,旨在帮助开发者掌握多样化的网页设计技巧。 首先,我们要理解XHTML的基本结构,它由一系列的元素(tags)组成,这些元素通过嵌套和组合来构建网页的结构。例如,`...
在传统的Java Web开发中,我们通常会使用JSP(JavaServer Pages)配合JSTL(JavaServer Pages Standard Tag Library)或者其他模板引擎如FreeMarker或Thymeleaf来实现页面布局。然而,这些方法往往需要一定的学习...
这里我们主要探讨基于Eclipse开发环境的实现方案。 首先,自定义ViewGroup是基础。你需要创建一个继承自LinearLayout或RelativeLayout的自定义布局类,重写其onMeasure()和onLayout()方法。在onMeasure()中,你需要...
5. **编程接口**:除了直观的拖放设计,DockPanel Suite还提供了丰富的API,开发者可以通过代码控制控件的布局,实现更复杂的动态布局逻辑。 6. **性能优化**:DockPanel Suite经过优化,即使在处理大量控件时也能...