一个代替Tiles和SiteMesh的布局工具(已开源)

Tiles:极简的新标签页 概述 Tiles 是一个替代的新标签页,它以彩色、简约的瓷砖网格显示您最喜欢的所有网站,其中每个瓷砖都有一个两个字符的符号和一个根据网站图标自动设置的背景颜色。 您可以添加的瓷砖数量几乎没有限制。 使用 Chrome 工具栏中的按钮添加图块真的很容易。 无论您添加多少磁贴,您都无需滚动以找到所需的站点 - 磁贴会根据需要增长和收缩。 Tiles 努力改善新标签页的美感和功能。 每个磁贴都可以通过其颜色和两个字符的符号轻松识别,即使有大量磁贴,也可以轻松启动您喜爱的网站。 同时,所有的磁贴都是一致且干净的,让您的新标签页无论如何都看起来很漂亮。 截图 您可以在目录中查看扩展程序的屏幕截图。 测试 要运行测试,您必须转至chrome-extension://[EXTENSION ID]/tests/tests.html ,其中[EXTENSION ID]是来自 Chrome 扩展程序的 I 立即下载

   项目在 [url]http://sourceforge.net/projects/jwebbox[/url]
  解压后里面有个war包,扔到Tomcat6.0目录下就可以了,这是个很小的包,里面没有引用其它包,绝对能跑起来。
  主要特点: 实现了Tiles的类似功能,完全对象化,无需配置,直接在页面可动态生成其它页面组件(称做Box),从此,面向对象的那一套什么继承接口之类的,就可以放手用在页面布局上了。多说无益,还是看看代码吧:
  JSP源码示例一:
[code="java"]
<%@page import="com.jwebbox.Box"%>
<%
 class HomePage extends Box{
 public void init(){
 this.setPage("/MainLayoutBox.jsp"); 
 this.putBox("top", new Box("/menu.jsp").setAttribute("msg","(Demo3: show how to extends a Box)"));
 this.putBox("left", new Box().addRunable("/alex.jsp"));
 this.putBox("right", new Box("/david.jsp"));
 this.putBox("bottom", new Box("/james.jsp"));
 }
} 
 class OtherPage extends HomePage{}
    new OtherPage().putBox("right",new Box("/peter.jsp")).putBox("bottom",new Box()).show(pageContext);;
%>
[/code]
   以上代码先生成一个Box对象,再设它的模板为MainLayoutBox.jsp, 然后给它上下左右栏赋值, 然后是另一个类继承于它并生成一个实例,修改父类的属性后调用show()方法显示出来。页面截图见附图第一张。可见,这个布局方法直接了当,不要任何配置文件。为了演示,我将代码直接写在jsp中,其实也可以抽出来写到单独的java文件中。
   以上源码中引用到的JSP布局模板文件源码如下:
   [code="java"]
<%@page import="com.jwebbox.Box"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
<!--
#temp_content {width: 900px; margin: auto; background-color:#EEEEEE;}
#temp_content #temp_left {margin: 10px; width: 500px; float: left; background-color:#CCFFCC; }
#temp_content #temp_bottom {clear: both; margin: 10px;background-color:#9999CC;}
#temp_content #temp_top {margin: 10px;background-color:#99CCCC;}
#temp_content #temp_right {margin: 10px; float: right; width: 350px;background-color:#FFFFCC;}
-->
</style>
</head>
<%
 Box m = Box.getBox(pageContext);
%>
 <body>
  <div id="temp_content">
   <div id="temp_top">
    <div align="center">
    <%m.getBoxFromMap("top").show(pageContext); %>
    </div>
   </div>
   <div id="temp_left">
    <%m.getBoxFromMap("left").show(pageContext);%>
   </div>
   <div id="temp_right">
    <%m.getBoxFromMap("right").show(pageContext);%>
   </div>
   <div id="temp_bottom">
    <div align="center">
    <%m.getBoxFromMap("bottom").show(pageContext);%>
    </div>
   </div>
  </div>
 </body>
</html>
[/code]
    这是一个常见的四栏布局,就不多说了。

   JSP源码示例二:
[code="java"]
<%@page import="com.jwebboxtest.GetSportsController"%>
<%@page import="com.jwebbox.Box"%>
<%@page import="com.jwebbox.TableBox"%>
<%
 class HomePage extends Box{
 public void init(){
 this.setPage("/MainLayoutBox.jsp"); 
 TableBox table = new TableBox(null,GetSportsController.class);
 table.setAttribute("name","tom"); 
 table.setRow(30);
 table.setCol(1);
 table.setElementBox(new Box("/tom.jsp"));
 table.setRenderBox(new Box("/tomRender.jsp").setAttribute("title","Hi, I'm Tom"));
 this.putBox("top", new Box("/menu.jsp").setAttribute("msg","(Demo2: show how to initializ params and use your render page.)"));
 this.putBox("left", new Box().addRunable("/alex.jsp").addRunable(table).addRunable("/peter.jsp"));
 this.putBox("right", new Box().addRunable("/david.jsp").addRunable("/peter.jsp").addRunable("/james.jsp"));
 this.putBox("bottom", new Box("/peter.jsp"));
 }
} 
 new HomePage().show(pageContext);
%>
[/code]
  以上代码主要演示了一个TableBox的用法,这个TableBox是继承于Box的一个子类,用于表格的显示,效果图见附图2。 这个演示还涉及到tomRender.jsp,tom.jsp,GetSportsController.class三个文件,tomRender.jsp是一个表格的模板(如不给出模板,系统会使用默认自带的一个html格式), tom.jsp是要显示元素的模板,另一个文件GetSportsController.class 相当于Tiles中的Controller,用于生成数据,用过Tiles的都知道,我就不多讲了,源码如下
[code="java"]public class GetSportsController implements BoxController {
 static final String[] sports = { "basketball", "soccer", "vollyball" };

 public void execute(PageContext pageContext, Box box) {
  TableBox table = (TableBox) box;
  String name = (String) table.getAttribute("name");
  List<Object> l = new ArrayList<Object>();
  for (int i = 1; i <= table.getCol() * table.getRow(); i++) {
   l.add(new String[] { name, String.valueOf(i), sports[i % 3] });
  }
  table.setElementList(l);
 };
}[/code]
   和Tiles中的Controller是类似的,上面实际上和一个分页查询的逻辑是类似的。另外Box类和Tiles一样,也可以指定一个ControllerURL来往Request里压数据。我编写TableBox的主要目的是验证一下Box基类的作用,同样的道理,以后编写其它页面组件应该也不难,这里面用对象编程的好处就体现出来了。     
   有兴趣的同志们可以当下来试一试。只要是JSP页面,这个布局工具就能用,唯一要做的就是把jwebbox1_0.jar这个包扔到WEB-INF/Lib目录下。
   目前还是1.0版,错误肯定不少,欢呼大家指正。我今后初步的打算是在它的单例化、序列化上做一些改进,如果有时间,再加一些分页条,Tree等组件进来, 本来只想做一个布局工具的,不知不觉要做成组件包了,也不知道是好还是坏,但有一点可以肯定的是,这些组件在Eclipse中只要敲个点号,就会有代码提示,并有编译检查,绝对比标签好用。 
  (顺提一下,刚才发现putBox和setAttribute功能相重,在下个版本中将会合并)

图1:

图1

图2:

图2

使用sitemesh替换tiles2,spring mvc+spring web flow+sitemsh NULL 博文链接:https://clongjava.iteye.com/blog/1350754 立即下载

相关推荐

jWebBox2:纯粹的面向对象的JSP布局工具-开源

JWebBox2.0.0是Java服务器页面(JSP)项目中使用的小型布局工具,起着Tiles和SiteMesh的作用,但是它是纯面向对象设计的,没有XML文件,没有标签,功能强大但简单(仅1个Java类),并且易于使用,可用于构建整个网站或仅构建某些页面组件。 JWebBox2.0.0是遵循BSD许可证的开源软件。 关于JWebBox2.0.0的主要功能:1)使用Java类而不是XML文件来呈现JSP布局,该Java类称为“ Box”。 2)与Tiles / Struts / Spring MVC等其他框架没有冲突,它可以用于构建整个网站或仅用于几个页面组件。 3)没有标签,不需要第3方jar库,1个纯Box.java文件完成了Tiles所做的所有工作。 4)布局是动态创建的,很容易在运行时创建或修改布局。 5)准备方法支持静态方法,实例方法和URL。

SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架

一、SiteMesh项目简介       OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。       Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布...

zhjh17426的专栏 198

【IPAM】Netbox docker模式版本升级

NETBOX 是一个开源的网络资源管理系统,主要用于管理 IP 地址、机架、设备、接口等网络资源信息。下面是 NETBOX 的功能、优点和缺点的详细介绍。

u012153104的博客 1330

写了个纯对象化的,代替Tiles和SiteMesh的布局工具jWebBox(已开源),大家评一评

项目在 [url]http://sourceforge.net/projects/jwebbox[/url] 解压后里面有个war包,扔到Tomcat6.0目录下就可以了,这是个很小的包,里面没有引用其它包,绝对能跑起来。 主要特点: 实现了Tiles的类似功能,完全对象化,无需配置,直接在页面可动态生成其它页面组件(称做Box),从此,面向对象的那一套什么继承接口之类的,就可以放...

drinkjava的专栏 278

Matlab R2024a硬件支持包安装避坑指南:以Arduino为例(附离线包下载)

本文详细介绍了Matlab R2024a硬件支持包(Support Package)的安装流程,特别是针对Arduino平台的避坑指南和高效部署方法。从环境准备、离线安装方案到Arduino支持包的专项优化,提供了全面的技术细节和解决方案,帮助开发者避免常见错误,实现快速部署。

weixin_33737134的博客 449

今天出一个candence 17.4 allego的安装教程

7、安装完成,接下来进行补丁更新,找到Hotfix_SPB17.40.035_wint.iso软件 ,右击鼠标选择装载。6、因为之前选择的定制安装,这一步不知道具体要安装啥,因此都勾选,点击NECK,接下来等待安装完成。后面经过仔细对比,发现是前面更新补丁时选择了F盘,F盘是candence安装包,不是补丁。8、在破戒大师里选择安装更新补丁,并找到刚才装载的安装包里的程序,点击下一步。3、打开破戒大师,找到安装candence进行如下图选择,点击下一步。有耐心的人可以重新卸了再装一边,我就不卸了,直接装。

hcvinh的博客 2727

两种页面布局(Tiles、Sitemesh)

 页面布局在以前的开发过程中,我常常遭遇这样的经历,要完成某个任务,首先由页面设计人员来设计页面原型,再交给程序员进行处理。很多情况下,我们总是要整理一个完整的页面。事实上,我们做了太多的重复工作。很多页面的结构是完全相同的,页面的头,尾,导航菜单都是相同的,只是主体内容部分不同而已。重复整理这些相同的部分是一个不小的负担,我们很自然的想到,要是这些页面元素能够复用就会省下很多事。

lixuanshuai的专栏 2528

SRAM compiler中Power Gating与Retention的实战配置指南

本文深入解析了在SRAM compiler中配置Power Gating(电源门控)与Retention(数据保持)功能的实战指南。针对低功耗芯片设计,文章详细阐述了如何根据应用场景(如移动AP、IoT设备)权衡开关类型、尺寸、唤醒时序以及保持电压,以实现静态功耗优化与数据可靠性的最佳平衡,并强调了后端实现与签核检查的关键要点。

weixin_29204121的博客 296

Struts2, Spring MVC, Sitemesh, Tiles 性能比较

(本文出自 http://blog.youkuaiyun.com/AlexLynn ,转载时请注明出处)一、概述:Struts2出来之后,有很多人开始尝试使用,很多概念与Struts1已经有了很大变化。关于Struts2与Spring MVC之间的功能差异评述,网络上已经有很多,每个人都有自己的喜好和选择,这里就不再重复。本篇只对Struts2与Spring MVC之间的运行速度做个比较,另外也对

Alex Lin的专栏 5488

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作

本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。

weixin_27032989的博客 529

Unity中语法糖带来的GC问题 ——那些看起来优雅、实际上在背后偷偷生垃圾的代码

*语法糖(Syntactic Sugar)**指的是编程语言中为了让代码更简洁、易读而提供的简便写法。比如C#中的foreachlambda表达式LINQ自动属性等。语法糖本身不是坏事,但在Unity等对GC敏感的环境下,要警惕语法糖带来的隐式内存分配。合理使用语法糖,关键场合用更“丑陋”但高效的写法,才能保证游戏流畅运行。下面我将更深入地分析Unity中语法糖导致GC的原理、具体场景、检测与优化技巧,并补充一些容易忽视的细节。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 518

Tiles & SiteMesh

 这两天在给公司的新项目搭框架,在配tiles框架的时候发现一个小问题:   比如开发团队一共5人,每人10个页面,如果按照简单的tiles框架配置方法,每个中都会产生很多重复的代码,导致tiles-defs.xml文件不段的膨胀.    仔细想了想tiles框架的原理,如果tiles支持嵌套功能的话,虽然tiles-defs.xml文件中的个数没办法减少,但每个中的是完全可以精简的.即需

ArduousBonze的专栏 5104

Tiles与siteMesh页面布局管理

  Tiles的使用       Tiles 是apache推出的布局管理工具包。其原理和功能类似于jsp:include 和 标签。如果多个页面中有多个公共的内容时,使用 Tiles来定义一个公有区域的模板,在其它页面中只需要简单引入就可以了。       安装步骤:1.       在http://struts.apache.org/ 上下载 struts 。解压缩后将 a

GG 的专栏 1238

基于STM32L4XX、HAL库的 ATGM336H GPS定位模块驱动程序设计

/ 转换为km/h。// 定位状态: 0=无效, 1=GPS定位, 2=差分定位。// GPS解析数据。支持GPS/BeiDou/GLONASS/Galileo/QZSS多系统联合定位。// 回调函数(需要在HAL_UART_RxCpltCallback中调用)// 地面速度(km/h)// 海拔高度(m)

zhusl6688的博客 794

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[页面模板框架对比] Apache Tiles VS Sitemesh

1. 原理对比 (1) Apache Tiles 顾名思义,Tile是瓷砖的意思,也就是说一个网页是由多个Tile组成的。     用户通过访问一个页面的Apache Tiles定义名,就可以访问一个由定义文件中包含的页面组成的最终的JSP。     如以下一个Apache Tiles定义文件:    [java] view plain copy

孤天浪雨 2193

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Tiles和SiteMesh,谁更适合你

前段时间因工作需要,再次对Tiles和SiteMesh进行了应用对比,接下来我简单阐述一下我目前的结论,有错的地方,希望有朋友能够给予指导。   版本选择:Tiles 2.1.2 SiteMesh 2.4   因兄弟们极力推荐,说SiteMesh好,我问为什么?他们告诉我说,网上文章都说SiteMesh好。于是我首先到opensymphone下了SiteMesh来试用,地址:http:/...

wenzi1wenzi的博客 162

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SiteMesh----Web界面布局、装饰框架

[b]一、SiteMesh项目简介[/b] OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration) 的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。 Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在...

pengtyao的专栏 226

java web 页面布局框架_SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架

下载地址:http://www.opensymphony.com/sitemesh/download.action目前的最新版本是Version 2.3;2、在工程中引入SiteMesh的必要jar包,和struts2-sitemesh-plugin-2.0.8.jar;3、修改你的web.xml,在里面加入sitemesh的过滤器,示例代码如下:sitemeshcom....

weixin_32137855的博客 204
上一篇: 写了个纯对象化的,代替Tiles和SiteMesh的布局工具jWebBox(已开源),大家评一评
下一篇: 征求开源脚手架项目发起人
drinkjava
博客等级 码龄19年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值