`
dengyin2000
  • 浏览: 1224708 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

T5 技巧 2:为Grid组件的每一行增加“删除/修改”链接。

阅读更多
现在正在使用T5开发一个小项目。 因为现在T5还正处于发展中。 而且没有像T4一样有许多的文档。 和例子(Workbench, Vlib)。 所以我会把在这个开发中遇到的一些问题记录下来。

记得在T4中是使用一组字符串来作为table columns。 为了加上删除/修改按钮的话,我们就只要加上"!operation" 这样的字符串, 然后用block render td就行了。但是到了T5中。 并没有提供这样的属性。

在看了Grid组件的参数后。 我们发现model 这个参数。 毫无疑问这个参数是用来定义Bean中要显示的列, 是否排序, 显示的顺序 等等。  具体可以看org.apache.tapestry.beaneditor.BeanModel。org.apache.tapestry.services.BeanModelSource.  org.apache.tapestry.beaneditor.PropertyModel. 这些接口和他们的实现类。

那我们要怎样增加这样的“删除/修改”列呢? 因为column必须是要在Bean中的一个property。 所以最直接的方法是在Bean中增加这样的一个假的属性。  比如。

class User {

  private int id;
  private String name;
  
  // add a fake property. However this property shouldn't use except in grid render.
  private String operationColumn;

    
  //...............other properties...........

    //  .................getter/setter methods

}



<t:parameter t:name="operationColumnCell">
					<a t:type="ActionLink" t:id="deleteLink" context="currentRow.id">删除</a>
				</t:parameter>


ok.  这样我们就实现了这个“删除/修改”列。

但是大家可能都会觉得这样不爽。因为operationColumn污染了我们的User类。

下面介绍种不污染的方法。

我们还是要从model这个参数下手。。

我们需要build一个beanModel

package com.javaeye.dengyin2000.gtts.tapestry;



import java.lang.annotation.Annotation;



import org.apache.tapestry.PropertyConduit;



public class OperationPC implements PropertyConduit {

	public Object get(Object arg0) {

		return "";

	}



	public Class getPropertyType() {

		return String.class;

	}



	public void set(Object arg0, Object arg1) {

	}



	public <T extends Annotation> T getAnnotation(Class<T> arg0) {

		return null;

	}

}




public static BeanModel buildDriverBeanModel(BeanModelSource beanModelSource, ComponentResources componentSources){
		if (driverBeanModel == null){
			
			PropertyConduit operationPC = new OperationPC();
			
			driverBeanModel = beanModelSource.create(Driver.class, false, componentSources);
			driverBeanModel.remove("id", "sex", "photo", "address", "sexType", "national");
			driverBeanModel.get("name").label("姓名").order(0);
			driverBeanModel.get("idCard").label("身份证").order(1);
			driverBeanModel.get("telNo").label("电话号码").order(2);
			driverBeanModel.get("carNo").label("车牌号码").order(3);
			driverBeanModel.get("carLong").label("车长(米)").order(4);
			driverBeanModel.get("carWidth").label("车宽(米)").order(5);
			driverBeanModel.get("carHeight").label("车高(米)").order(6);
			
			[color=red][b]driverBeanModel.add("operation", operationPC).label("操作").order(7).sortable(false);[/b][/color]
		}
		return driverBeanModel;
	}



在 page 类。


      @Inject
	private BeanModelSource beanModelSource;
	@Inject
	private ComponentResources componentSources;
        ..........................................
	public BeanModel getDriverBeanModel(){
		return MiscUtils.buildDriverBeanModel(beanModelSource, getComponentSources());
	}   

  

html template:

<table t:id="driverGrid" t:type="Grid" model="driverBeanModel" source="driverSource" row="currentRow" empty="nodata" pagerPosition="bottom" rowsPerPage="12" class="xx">
[color=red][b]				<t:parameter t:name="operationCell">
					<a t:type="ActionLink" t:id="deleteLink" context="currentRow.id">删除</a>
				</t:parameter>[/b][/color]
			</table>




ok。

参考:http://www.nabble.com/T5---Adding-modify-delete-actions-to-a-Grid-t3370935.html#a9379935
分享到:
评论
12 楼 koda 2007-08-22  
是啊,应该是这样哦:)

那么title文字的定制呢?
11 楼 dengyin2000 2007-08-22  
koda 写道
接下来的定制是:
1). 如何更改默认Title显示
2). 如何定制CSS


在你的页面中覆盖掉tapestry定义的css。 比如:

引用
table.t-data-grid {
border-collapse:collapse;
border-left:1px solid silver;
width:100%;
}

table.t-data-grid thead tr {
background:#990000 url(../images/sprites.gif) repeat-x scroll 0pt -1300px;
color:white;
}

div.t-data-grid-pager span.current {
background:#FFFFFF none repeat scroll 0%;
border:1px solid #CCCCCC;
color:#CCCCCC;
padding:2px 5px;
text-decoration:none;
}

div.t-data-grid-pager a:hover {
background:#CC0000 none repeat scroll 0%;
color:#FFFFFF;
}

div.t-data-grid-pager a {
border:1px solid silver;
color:#CC0000;
font-size:medium;
margin-right:5px;
padding:2px 5px;
text-decoration:none;
}

div.t-data-grid-pager span.current {
border:1px solid silver;
color:black;
font-size:medium;
margin-right:5px;
padding:2px 5px;
text-decoration:none;
}



效果如下:  (上面的示例代码就是来自这个页面。)
10 楼 koda 2007-08-22  
接下来的定制是:
1). 如何更改默认Title显示
2). 如何定制CSS
9 楼 dengyin2000 2007-08-22  
koda 写道
我又去Tapestry5里求证了一下,楼主使用的方式是对的。另外有时我们可能只想显示bean类的某些属性,怎么做?
楼主的做法像这样:
driverBeanModel.remove("id", "sex", "photo", "address", "sexType", "national");
还有一种做法是在bean的getter方法前说明annoation.
@NonVisual
public String getPhoto(.....

相比之下,我觉得楼主的做法更好(集中设定),而且如果bean是hiernate实体类,如果用@NonVisual,必然污染了bean,不好维护。


我确实是因为不想使用NonVisual annoation。 因为如果我有两个table。  一个需要这个属性, 另外一个不需要这个属性的话, 用NonVisual是不行的。。
8 楼 koda 2007-08-22  
我又去Tapestry5里求证了一下,楼主使用的方式是对的。另外有时我们可能只想显示bean类的某些属性,怎么做?
楼主的做法像这样:
driverBeanModel.remove("id", "sex", "photo", "address", "sexType", "national");
还有一种做法是在bean的getter方法前说明annoation.
@NonVisual
public String getPhoto(.....

相比之下,我觉得楼主的做法更好(集中设定),而且如果bean是hiernate实体类,如果用@NonVisual,必然污染了bean,不好维护。
7 楼 dengyin2000 2007-08-22  
koda 写道
我的意思是楼主使用
PropertyConduit接口,他是不是一个内部类阿(tapestry内部的类)
如果是的话,应该有更更好的方法来实现这个功能


			driverBeanModel.add("operation", new PropertyConduit() {
				public Object get(Object arg0) {
					return "";
				}

				public Class getPropertyType() {
					return String.class;
				}

				public void set(Object arg0, Object arg1) {
				}

				public <T extends Annotation> T getAnnotation(Class<T> arg0) {
					return null;
				}
			}).label("操作").order(7).sortable(false);


你的意思是这样??

我觉得这个应该放到一个static field里面, 以便重用。。

引用
如果你用的正确的接口类,我就越发怀疑起Tapestry5是否违背了其简单性的承诺。


这句是什么意思?  我哪里没有正确使用接口了??    你在解释下tapestry5的简单性。
6 楼 koda 2007-08-22  
我的意思是楼主使用
PropertyConduit接口,他是不是一个内部类阿(tapestry内部的类)
如果是的话,应该有更更好的方法来实现这个功能
5 楼 hitalang 2007-08-22  
谢谢,期待好文ing
4 楼 dengyin2000 2007-08-21  
koda 写道
我不确信你是否调用了Tapestry的内部类。如果你用的正确的接口类,我就越发怀疑起Tapestry5是否违背了其简单性的承诺。



什么意思?  直接点。。
3 楼 koda 2007-08-21  
我不确信你是否调用了Tapestry的内部类。如果你用的正确的接口类,我就越发怀疑起Tapestry5是否违背了其简单性的承诺。

2 楼 dengyin2000 2007-08-21  
biaoming 写道
我也在T5的分页列表,这个方法对我非常有用,但是能不能实现通过一个复选框组,如标个全选的呢?


你看看T4的 checkboxGroup。  基本上都是一样的吧。

在你的bean中加一个boolean selected  然后用checkbox binding到这个属性。。
1 楼 biaoming 2007-08-21  
我也在T5的分页列表,这个方法对我非常有用,但是能不能实现通过一个复选框组,如标个全选的呢?

相关推荐

    友价T5商城源码支持app 带个人免签约支付接口友价T5商城源码

    最新带个人免签约支付接口友价T5商城源码,支持app上传功能,源码交易网源码,站长交易网 独家修复后台设置虚拟数据后首页不生效,新加个人免签约支付接口---码支付接口! 码支付接口是个人支付宝 微信 QQ 收款,全自动...

    National Talent Search Examination

    自1961年NCERT成立以来,就启动了一个名为“国家科学天才搜索计划”(NSTSS)的项目,旨在识别和培养优秀学生,并为他们提供奖学金。该计划最初仅限于当时的德里联邦直辖区,第一年仅向11年级的学生颁发了10个奖学金...

    T5UIC2 开发指南_V20.pdf

    T5UIC2软件平台以其精简的指令集和灵活的配置选项,为开发者提供了一个高效的人机界面解决方案。 首先,T5UIC2支持多种尺寸的串口屏硬件型号,从2.8寸到12.1寸不等,提供了丰富的分辨率选项,满足不同应用场景下的...

    spart T5-2 solaris

    Sparc T5-2 是一款由Sun Microsystems(后被Oracle公司收购)设计的高性能服务器平台,专为关键业务和数据中心应用而构建。该服务器基于SPARC架构,提供卓越的计算能力、内存容量和I/O性能。Sparc T5-2 的核心亮点...

    共享汽车管理系统 JAVA+Vue+SpringBoot+MySQL

    项目录屏:https://www.bilibili.com/video/BV1xx4y187t5 启动教程:https://www.bilibili.com/video/BV1pW4y1P7GR 项目讲解视频:https://space.bilibili.com/417412814/channel/collectiondetail?sid=2242844

    cisco IOS下载链接大全

    Cisco IOS(Internetwork Operating System)是思科系统为大部分路由器及部分交换机等网络设备所开发的一种专有操作系统。它负责控制并管理设备的各项功能,如数据包转发、路由选择等。Cisco IOS采用模块化设计,...

    t5-pegasus:中文生成式预训练模型

    T5飞马 中文生成式预训练模型,以mT5为基础架构和初始权重,通过类似PEGASUS的方式进行预训练。 详情可见: ://kexue.fm/archives/8209 分词器 我们将T5 PEGASUS的令牌...目前开源的T5 PEGASUS是基本版,总参数量为2

    T5-2文本安装

    T5-2文本安装旨在为用户提供一个简洁、高效且易于自动化管理的安装方法。 ### 安装语言的选择 在开始安装之前,首先需要选择安装语言。这一步非常重要,因为它会影响到后续安装过程中显示的所有文本内容的语言版本...

    Bart_T5-summarization:使用Bart和T5模型的汇总任务

    Bart_T5-摘要使用来自Bart和T5模型的汇总任务可以直接比较文本摘要Bart和T5的最佳模型。安装需求pip install -U transformerspip install -U torchpip install flask跑步python app.py巴特总结T5总结

    基于T5-small的问答模型 它实际上是QuestEval指标的一个组成部分,但可以按原样独立使用,仅用于 QA

    2. **编码**:将预处理后的输入馈送给T5-Small模型,模型将其转换为内部表示。 3. **解码**:模型根据编码的输入生成答案序列。 4. **后处理**:将模型生成的文本序列转化为实际答案,并进行必要的清理或修剪。 **...

    思维导图模板免费分享-迅捷思维导图

    专为小学生设计的数学学习辅助材料,通过简单的图形和文字解释了除法的基本概念及其应用场景,有助于孩子快速掌握除法运算技巧。 **链接**: [http://app.siweidaotu.com/#R0d217b86d4f982a63be8f34ba6e06313]...

    GNUVario-TTGO-T5-website:GNUVario-TTGO-T5-网站

    【GNUVario-TTGO-T5-website:GNUVario-TTGO-T5-网站】是一个专注于GNUVario-E项目的在线资源平台,该平台致力于提供基于ESP32芯片的开源硬件设计和变量计的详细信息。这个项目的核心是将开源精神应用于电子工程领域...

    T5 + Hibernate 用户登陆2

    【标题】"T5 + Hibernate 用户登陆2"指的是在使用T5框架的基础上,结合Hibernate ORM技术实现用户登录功能的一个教程或案例。T5通常是指一个Web开发框架,而Hibernate则是一个流行的Java对象关系映射(ORM)工具,...

    迪文T5L Keil C51项目模板.rar

    迪文T5L是一款基于8051内核的微控制器,由迪文科技公司设计生产,常用于工业控制、智能家居、消费电子等领域。Keil C51是针对8051系列微控制器的集成开发环境,它集成了编译器、调试器和IDE,使得C语言编程变得简单...

    谷歌FLAN-T5作者亲讲:5400亿参数,1800个任务,如何实现大语言模型“自我改进”_鲟曦研习社.pdf

    知识点2:Prompting方法可以预示着针对大模型的下游微调,将成为研究领域关注的重点。 知识点3:Chain of Thought(CoT)是一种最新的Prompting机制,可以让语言模型有了自我改进的能力。 知识点4:谷歌研究者们...

    03-Microsoft Teams 产品资源和技术社区1

    Microsoft Teams 是微软推出的一款团队协作平台,它集成了聊天、会议、电话、文件共享和应用集成等多种功能,旨在提升企业内部沟通与协作效率。本文将详细介绍Microsoft Teams的开发入门、实践资源以及技术社区,...

    ippicv_2017u3_lnx_intel64_general_20180518.tgz和20170822

    网上比较多的ippicv是ippicv_2017u3_lnx_intel64_general_...其实更万能的方式参考该链接:https://www.wandouip.com/t5i170326/ 特别注意file://这个是cmake读取文件的方式,所以 "file:///home/lc/下载/"是没错的

    terraform-provider-alicloud_1.95.0_linux_amd64.zip

    "terraform-provider-alicloud"正是Terraform用来与阿里云API接口进行通信的插件,版本号为1.95.0,适用于Linux操作系统且基于AMD64架构。这个zip文件包含了该插件的二进制可执行文件,用于在本地系统上运行...

Global site tag (gtag.js) - Google Analytics