Tapestry在静态页面和动态内容分工方面的研究

news/2024/7/4 10:29:23

Tapestry在静态页面和动态内容分工方面的研究

Tapestry的一个最耀眼的功能是其绝好的模板设计思想,它能够将动态内容以极少的侵入性而展现到HTML页面上,我对其这一功能非常赞赏,如果 Tapestry能够像Spring那样把这一部分HTML模板解析功能独立出来,打成一个Tapestry-Core.jar极不妙哉?!

在工作实践当中,我发现Tapestry提供的Shell组件其实用处不大,美工人员作出的页面大多已包括HTML TITLE HEAD LINK 等标签,如果将这些删除而封装到Shell岂不多此一举?而且Shell引用CSS IMAGE的方式(Asset)比较麻烦。

所以,我建议开发组不使用Shell而直接采用原来静态页面的配置,但是Tapestry对URL进行了处理而且使用Servlet之后相对路径往往会出问题,为此提供了一个简单Base组件,在HEAD中增加一个base标签即可。
如页面头部如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>测试页面</title>
<span jwcid="base"/>
<link href="../css/menu.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="../js/menu.js"></script>
</head>
。。。。。。

Base.java:
    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
        BaseTagWriter baseTagWriter = new BaseTagWriter();
        baseTagWriter.render(writer, cycle);
    }

这样美工的增加的工作就非常非常少了,而且美工与开发人员的配合也变得很愉快了。

个人认为理想的分工效果是这样的:
整个Web应用可以以两种方式浏览,一种是浏览静态的HTML页面,另一种是浏览动态的web内容。如果想以第二种方式浏览则web.xml中增加
        <servlet-mapping>
            <servlet-name>app</servlet-name>
            <url-pattern>*.html</url-pattern>
        </servlet-mapping>
这样访问HTML页面时Tapestry会将动态内容发送给浏览器,如果想浏览静态的HTML页面,则删除这个映射即可。
这样一来,美工人员和开发人员共享同一套HTML模板文件,相互之间的干扰比较少。
 


http://www.niftyadmin.cn/n/1995593.html

相关文章

java树形菜单制作

java树形菜单制作用到的技术代码实现用到的技术 SpringMVCSpringmybatiseasyui 代码实现 dto&#xff08;适用于easyui的实体类&#xff09; package com.grand.orgn.dto;import java.util.HashMap; import java.util.Map;/*** * author * 适用于easyUI树形结构的实体类* d…

文件-进程关联演示程序(出自CVC)

文件-进程关联演示程序(出自CVC)1、首先使用ZwQuerySystemInformation查询所有进程句柄&#xff0c;2、获取句柄所代表对象信息&#xff0c;查出目标文件。核心态程序相对简单&#xff0c;对于用户态程序&#xff0c;使用ZwQueryInformationFile同时与GetFileInformationByHand…

Tapestry中配置文件page的简化处理

Tapestry中配置文件page的简化处理 Tapestry每个页面基本上都需要一个.page的配置文件&#xff0c;因为需要对模板HTML的动态内容部分进行配置&#xff0c;这是为静态页面和动态内容更好的分工&#xff0c;确实需要这么做。但是&#xff0c;每个page文件的典型配置如下&#x…

关于由HANDLE获取文件名的问题

问题&#xff1a;关于由HANDLE获取文件名的问题 PFILE_NAME_INFORMATION pfni; pfni(PFILE_NAME_INFORMATION)ExAllocatePool(PagedPool, sizeof(FILE_NAME_INFORMATION) 255 * sizeof(WCHAR) ); memset(pfni,0,sizeof(FILE_NAME_INFORMATION) …

AngularJS controller调用factory

1、定义 factory.js 文件 var appFactorys angular.module(starter.factorys, []) appFactorys.factory(HouseFactory, function () {var houseList [{ id: 0, title: 急售北二环 小区配套齐全 精装修, price: 88.0, describe: 2室1厅 120平米, img: img/ben.png },{ id: 1, …

Tapestry中Sumbit/ImageSubmit的属性selected和tag

Tapestry中Sumbit/ImageSubmit的属性selected和tag 个人认为Submit/ImageSubmit标准组件的两个属性selected和tag的设置比较罗嗦&#xff0c;可能是性能和灵活性的一种权衡吧。其中&#xff0c;selected指定页面类的一个属性&#xff0c;tag设置该页面属性的值。selected和tag…

centos虚拟机无法上网

centos虚拟机无法上网解决办法解决办法 首先确保使用的是nat模式 修改vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICEeth0 HWADDR00:0C:29:8D:E6:73 TYPEEthernet UUIDa81ecb00-6b42-4ff4-8895-170ab7a2672a ONBOOTyes #开机启动 NM_CONTROLLEDyes BOOTPROTOstatic# 修…

AngularJS controller调用services

1、定义 factory.js 文件 var appFactorys angular.module(starter.factorys, []) appFactorys.factory(GoodsFactory, function () {var goodsList [{ "id": 1, "title": "手机", "icon": "icon ion-android-phone-portrait c…