Struts2 Freemarker Jmesa(表格、分页) 使用的一点心得

声明:本文为作者原创,您可以随便使用,但是请注明作者与出处。:)
    最近做一个应用的时候用到了Jmesa(至于Jmesa的详细介绍,请Google),但是关于Struts2和Jmesa的资料特别少,费尽周折总算让他们两个正常运行了,现在把使用他们的一些心得写下来与大家分享。
    版本:
    Struts2          : 2.0.11
    Spring           : 2.5.1
    Freemarker  : 2.3.12
    Jmesa           : 2.2.9
 
    Eclipse 3.3
    对应Eclipse3.3的插件(没用MyEclipse,我依然活得不错,哈哈~)
   
    Tomcat 6.0.*
 
    Struts2与Freemarker的配置非常简单——根本不用配置,呵呵,关键点就在:怎么在Struts2环境下使用Jmesa?当然我只用到了Jmesa提供的Taglib,没用使用到其他高级功能。
    (1)、Jmesa实现的Taglib只需要在页面给它一个 List等集合类型的变量就可以正常显示。使用分页功能需要加入下面这段脚本:
< script type = " text/javascript " >
    
function  onInvokeAction(id)  {
        setExportToLimit(id, 
'');
        createHiddenInputFieldsForLimitAndSubmit(id);
    }

</ script >
    (2)、使用导出功能,此处以Excel为例。需要加入以下脚本:
     < script type = " text/javascript " >

        function onInvokeExportAction(id) 
{
            var parameterString 
= createParameterStringForLimit(id);
            alert(parameterString);
            location.href 
= '${request.getContextPath()}/(此处为Action的Url)?' + parameterString;
        }

    
</ script >
    还有关键的一点就是:Action要实现ServletRequestAware,ServletResponseAware这两个接口,并且加入以下代码:
     private  HttpServletRequest request;
    
private  HttpServletResponse response;
    
    
    
public   void  setServletRequest(HttpServletRequest request) ... {
        
this.request = request;
    }

    
    
public   void  setServletResponse(HttpServletResponse response) ... {
        
this.response = response;
    }
    以上变量定义了实例变量request 和 response,为什么要这样做呢?看一下Jmesa的Tag example就知道了,如下:
        
        TableFacade tableFacade 
=   new  TableFacadeImpl(id, request);
        tableFacade.setItems(items);
        tableFacade.setColumnProperties(
" password " " nickname " );
        tableFacade.setExportTypes(response, CSV, EXCEL); 
//  Tell the tableFacade what exports to use.    
        Limit limit  =  tableFacade.getLimit();
        
if  (limit.isExported())  {
            tableFacade.getTable().setCaption(
"user");
            tableFacade.getTable().getRow().getColumn(
"password").setTitle("password");
            tableFacade.getTable().getRow().getColumn(
"nickname").setTitle("nickname");
            tableFacade.render();
            
return null;
        }
    最关键的就是这两句了:
TableFacade tableFacade  =   new  TableFacadeImpl(id, request);
tableFacade.setExportTypes(response, CSV, EXCEL);  //  Tell the tableFacade what exports to use.
    第一句中如果没有request对象的话,不能实例化TableFacade类型的对象。
    第二句中如果没有response对象的话,就没有数据。
    除此之外还有一点要注意的就是页面中定义的tableFacade的id一定要与Action中的id的值相同,此id起标识导出文件的文件名的作用,也唯一标识一个table。
    好了只要注意以上这些Jmesa的这个Taglib就可以使用了。
    至于在Freemarker中使用Jmesa的这个Taglib,有以下注意事项:
    (1)、items的值(即数据集合)直接写变量名就可以
    (2)、maxRows属性写为maxRows=8 不用加引号
    以上两处注意事项不知道是不是Freemarker版本的问题,呵呵,有待检验。
    注:Jmesa的功能非常强大,可以实现复杂的表格 。。。。。。 好东西 思想先进
    jock.zh
    Yeah,it 's jock.
    有问题请回帖~~ :)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值