论坛首页 Java企业应用论坛

fastm plus方案:)

浏览 12243 次
精华帖 (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的双重循环。
0 请登录后投票
   发表时间:2004-07-20  
不错,我要好好研究研究。
0 请登录后投票
   发表时间: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的代码里。

待续。。。
0 请登录后投票
   发表时间:2004-07-20  
不过这样一来,从可读性而言,难道没有发现比velocity差了不少?
而且,从本质上来说,只要允许在脚本中使用函数调用,就可以实现if/else。
本身那个BEGIN DYNAMIC LIST的作用就是foreach的fastm版本(因为给了一个List,实际上可以是个有序Collection,所以封装上不如velocity)。再引入函数来实现if/else的功能,还不如if/else来得直接。毕竟这种情形很常见的。
0 请登录后投票
   发表时间:2004-07-20  
velocity我不熟,写出code来看看吧。
0 请登录后投票
   发表时间: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确实更加强有力。以前我一直懒得动。
0 请登录后投票
   发表时间:2004-07-27  
我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。
0 请登录后投票
   发表时间:2004-07-27  
sonymusic 写道
我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。


有点盲目了吧?
关于fastm的介绍就在这一版里,看了以后再发表意见吧。

再说,你回帖跟在fastm+后面,又算什么呢?
0 请登录后投票
   发表时间:2004-07-27  
庄表伟 写道
sonymusic 写道
我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。


有点盲目了吧?
关于fastm的介绍就在这一版里,看了以后再发表意见吧。

再说,你回帖跟在fastm+后面,又算什么呢?


我说的不知道是指“不知道是谁在什么时候因为什么目的开发的”。
我的帖子是赞charom的,不跟在这儿里跟在哪儿呢?难道要另起一个主题?
0 请登录后投票
   发表时间:2004-08-13  
sonymusic 写道
我不知道fastm是什么,但我赞同charom的意见。
用fastm我还不如直接用JSP呢。代码量一点没少,需要学习时间,忘的却比JSP还快。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics