锁定老帖子 主题:fastm plus方案:)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-07-20
4.3、服务列表
html: <table> <tr> <td colspan="4">A类服务</td> </tr> <tr> <td>A1服务</td> <td>A2服务</td> <td>A3服务</td> <td>A4服务</td> </tr> <tr> <td colspan="4">B类服务</td> </tr> <tr> <td>B1服务</td> <td>B2服务</td> <td>B3服务</td> <td>B4服务</td> </tr> <tr> <td>B5服务</td> <td>B6服务</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> ValueSet代码: ValueObject ServiceInfo=new ValueObject();; ValueObject SubServiceInfo=new ValueObject();; ValueList ServiceSubList=new ValueList();; ValueList ServiceList=new ValueList();; KeyValue kv=new KeyValue();; KeyValue kv2=new KeyValue();; KeyValue kv3=new KeyValue();; kv.set("name","A1服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","A2服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","A3服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","A4服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("subservice_name","A类服务");; SubServiceInfo.add(kv);; kv.set("sublist",ServiceSubList);; SubServiceInfo.add(kv);; kv3.set("servicesublist",SubServiceInfo);; ServiceList.add(kv3);; kv.set("name","B1服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","B2服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","B3服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","B4服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","B5服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("name","B6服务");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; ServiceSubList.add(kv2);; kv.set("subservice_name","B类服务");; SubServiceInfo.add(kv);; kv.set("sublist",ServiceSubList);; SubServiceInfo.add(kv);; kv3.set("servicesublist",SubServiceInfo);; ServiceList.add(kv3);; ValueSet root=new ValueSet();; root.add("servicelist",ServiceList);; Template代码: <table> <!-- BEGIN DYNAMIC LIST: servicelist --> <!-- BEGIN DYNAMIC OBJECT: servicesublist -->//可以省略 <tr> <td colspan="4">{subservice_name}</td> </tr> <!-- BEGIN DYNAMIC LIST: sublist;STEP:4;ProcessName:ServiceTable.tableAdd(sublist) --> <tr> <td>{service(0).name}</td> <td>{service(1).name}</td> <td>{service(2).name}</td> <td>{service(3).name}</td> </tr> <!-- END DYNAMIC LIST: sublist --> <!-- END DYNAMIC OBJECT: servicesublist -->//可以省略 <!-- END DYNAMIC LIST: servicelist --> </table> tableAdd代码: class ServiceTable { public static void tableAdd(ValueSet in); { if(in.length();%4>0);{ KeyValue kv=new KeyValue();; KeyValue kv2=new KeyValue();; ValueObject ServiceInfo=new ValueObject();; for(int i=0;i<4-in.length();%4;i++);{ kv.set("name","&nbsp;");; ServiceInfo.add(kv);; kv2.set("service",ServiceInfo);; in.add(kv2);; } } return in; } } 关键在于:<!-- BEGIN DYNAMIC LIST: sublist;STEP:4;ProcessName:ServiceTable.tableAdd(sublist) -->中的STEP:4。这样,就可以一个循环解决问题,而不是用TR/TD的双重循环。 |
|
返回顶楼 | |
发表时间:2004-07-20
不错,我要好好研究研究。
|
|
返回顶楼 | |
发表时间:2004-07-20
4.4、双色表格
这个问题比较简单,就不给出全部代码了。关键在于 <!-- BEGIN DYNAMIC LIST: tr;ProcessName:xxxx.tableColor(tr,"#0001ff","#0002ff"); --> <tr bgcolor={bgcolor}> <td>{itema}</td> <td>{itemb}</td> </tr> <!-- END DYNAMIC LIST: tr --> 其中,tableColor函数,是可以接收颜色作为参数的。当然,我们也可以设想接收n种颜色参数的函数,这样表格就可以变得像“彩虹”一样了。:lol: 4.5、Blog日历 这是真正复杂的问题,需要先进行分析,再给出我的解决方案。如果我给出的方案足够的简洁、清晰,相信会很有说服力的。 首先分析需求。我们希望在一个“月历表格”上,显示日期。这个是一个7*6表格的固定大小的表格,这个表格所在的页面,需要接收两个参数(year,month)。然后这个表格就可以显示这个指定月的月历。另一方面,这个表格还不只是显示简单的日历,当这个BLOG的主人,在这个月的某些天里,写过blog的,就应该在表格上反应出来。因此,从显示效果来说,我们的表格中每一个单元格有4种表现形式(本月内有文章的日期,本月内无文章的日期,非本月的有文章的日期,非本月的无文章的日期)。 于是,我们可以自然的切分出三种逻辑,从数据库里取出本月文章list的代码。依照历法计算日历表的代码。显示Blog日历的代码。这三种代码,应该各不相关,而他们的结合点,就在ViewLogic的代码里。 待续。。。 |
|
返回顶楼 | |
发表时间:2004-07-20
不过这样一来,从可读性而言,难道没有发现比velocity差了不少?
而且,从本质上来说,只要允许在脚本中使用函数调用,就可以实现if/else。 本身那个BEGIN DYNAMIC LIST的作用就是foreach的fastm版本(因为给了一个List,实际上可以是个有序Collection,所以封装上不如velocity)。再引入函数来实现if/else的功能,还不如if/else来得直接。毕竟这种情形很常见的。 |
|
返回顶楼 | |
发表时间:2004-07-20
velocity我不熟,写出code来看看吧。
|
|
返回顶楼 | |
发表时间:2004-07-20
如果对超越对象不熟,那怎么个超越法?岂不是有点像闭门造车。
下面我给出和你的template和tableAdd函数相对应的那段velocity: <table> #set($cols_num = 4); #foreach(services in servicelist); <tr> <td colspan="$cols_num">${services.subservice_name}</td> </tr> #foreach(service in services); #if(($velocityCount - 1); % $cols_num == 0); <tr> #end <td>${service.name}</td> #if($velocityCount % $cols_num == 0); </tr> #end #end #if($services.size(); % $cols_num !=0); #set($append = $col_num - $services.size(); % $cols_num ); #foreach(i in [1..$append]); <td>nbsp</td> #end </tr> #end #end </table> 这个还只是velocity的,如果是freemarker,我看fastm真的就没有必要了。如果真的要继续开发fastm,建议先把freemarker的文档看一边。特别是第2、第3章,看看freemarker是怎么做好fastm想做的事情的。 我对fastm最大的收获是终于使我下决心转向freemarker,它比velocity确实更加强有力。以前我一直懒得动。 |
|
返回顶楼 | |
发表时间:2004-07-27
我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。 |
|
返回顶楼 | |
发表时间:2004-07-27
sonymusic 写道 我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。 有点盲目了吧? 关于fastm的介绍就在这一版里,看了以后再发表意见吧。 再说,你回帖跟在fastm+后面,又算什么呢? |
|
返回顶楼 | |
发表时间:2004-07-27
庄表伟 写道 sonymusic 写道 我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。 有点盲目了吧? 关于fastm的介绍就在这一版里,看了以后再发表意见吧。 再说,你回帖跟在fastm+后面,又算什么呢? 我说的不知道是指“不知道是谁在什么时候因为什么目的开发的”。 我的帖子是赞charom的,不跟在这儿里跟在哪儿呢?难道要另起一个主题? |
|
返回顶楼 | |
发表时间:2004-08-13
sonymusic 写道 我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。 |
|
返回顶楼 | |