设为首页 收藏本站
查看: 879|回复: 0

[经验分享] [Apache Click快速开发]Click的多彩table组件

[复制链接]

尚未签到

发表于 2017-1-11 10:53:22 | 显示全部楼层 |阅读模式
  Click的Table组件很强大,当我第一次看到它的时候,就喜欢上它了。。
  一个简便的table只需要几行java代码就可以完成,而模板(与java类对应的htm)中可以简化到只剩$table一个标签。
  private Table table;table = new Table("empList")addControl(table);table.setClass(Table.CLASS_ITS);table.setPageSize(5);table.setShowBanner(true);table.setHoverRows(true);Column id = new Column("id", "序号");id.setWidth("50px");id.setTextAlign("center");table.addColumn(id);Column name = new Column("name", "姓名");name.setWidth("120px");name.setTextAlign("center");table.addColumn(name);Column gender = new Column("gender", "性别");gender.setWidth("50px");table.addColumn(gender);Column birth = new Column("birth", "出生日期");birth.setWidth("100px");birth.setSortable(true);table.addColumn(birth);Column email = new Column("email", "电子邮箱");email.setWidth("120px");email.setAutolink(true);table.addColumn(email);Column tel = new Column("tel", "联系电话");tel.setWidth("100px");table.addColumn(tel);Column job = new Column("job", "职位");job.setWidth("100px");table.addColumn(job);Column salary = new Column("salary", "工资");salary.setFormat("${0,number,#,##0.00}");salary.setTextAlign("right");salary.setWidth("120px");salary.setSortable(true);table.addColumn(salary);table.setDataProvider(new DataProvider<Person>() {public List<Person> getData() {return es.getEmpList();}});

DSC0000.gif

  几行代码,一个漂亮的表格就出来了,而且看到某些行上面的小箭头,就知道它还知道排序功能,而电子邮件中显示为超链接,也仅仅需要设置一个值。
  而且,它还有11种可选的颜色样式,分别为:blue1,blue2,complex,isi,its,mars,nocol,orange1,orange2,report,simple其中its是默认样式。
  complex

   DSC0001.gif
  isi
   DSC0002.gif

  orange1
   DSC0003.gif

  report
   DSC0004.gif
  click中包含有2中样式的分页条,如果觉得不够,还可以自定分页条,以此来满足应用的需要。
  下面是自带的2中分页条:
   DSC0005.gif

   DSC0006.gif

  对于第二种分页条,或者也可以显示到表格外面(默认的)
   DSC0007.gif

  在2中样式的分页都不能满足要求的时候,你就需要自定义了。需要在初始化table的时候重写其renderPaginator方法
  table = new Table("empList"){@Overrideprotected void renderPaginator(HtmlStringBuffer buffer) {renderPagingControl(buffer);}};private void renderPagingControl(HtmlStringBuffer buffer){int pageSize = table.getPageSize();int rowCount = table.getRowCount();int numPage = (rowCount+pageSize-1)/pageSize;String style = "width:20px;height:20px;padding:4px;margin-left:2px;border:1px solid grey;font-size:10pt";buffer.append("<a href='#' style='"+style+"'>第一页</a>");buffer.append("<a href='#' style='"+style+"'>前一页</a>");for(int i=1; i<=numPage; i++){if(i==table.getPageNumber()+1){buffer.append("<a href='#' style='"+style+"color:red;font-weight:bold;background:lightgrey'>"+i+"</a>");}else{buffer.append("<a href='#' style='"+style+"'>"+i+"</a>");}}buffer.append("<a href='#' style='"+style+"'>后一页</a>");buffer.append("<a href='#' style='"+style+"'>最后一页</a>");}完成之后的样子很粗犷,这里只是一种思路,美工的工作就得用点心思去慢慢干了。
DSC0008.gif
  这样基本能满足需求,但我还想给表格中的工资来个汇总,并把合计显示到表格的最后2行。大概的样子是这样的:
DSC0009.gif

  于是,用和自定义分页条类似的方法,在初始化table的时候同时重写其renderFooterRow方法
  @Overrideprotected void renderFooterRow(HtmlStringBuffer buffer) {renderFooter(buffer);}private void renderFooter(HtmlStringBuffer buffer){float total_salary = 0;float sub_total_salary = 0;int sub_begin = table.getPageNumber()*table.getPageSize();int sub_end = (table.getPageNumber()+1)*table.getPageSize();for(int i=0; i<table.getRowCount(); i++){Person ps = (Person)table.getRowList().get(i);float salary = ps.getSalary();total_salary += salary;if(i>=sub_begin&&i<sub_end){sub_total_salary += salary;}}String subFormat = "<b>小计</b>:  ${0,number,#,##0.00}";String totalFormat = "<b>总计</b>:  ${0,number,#,##0.00}";String subTotalDisplay = MessageFormat.format(subFormat, new Float(sub_total_salary));String totalDisplay = MessageFormat.format(totalFormat, new Float(total_salary));int cols = table.getColumnList().size();buffer.append("<tfoot><tr><td colspan='"+cols+"' style='text-align:right'>");buffer.append(subTotalDisplay);buffer.append("</td></tr><tr><td colspan='"+cols+"' style='text-align:right'>");buffer.append(totalDisplay);buffer.append("</td></tr></tfoot>");}感觉很好,继续给表格做几个选项吧。
DSC00010.gif
把所有的样式列出来,可以动态改变表格样式;可以改变分页显示条数;选择是否有高亮条;

  private Form style_form = new Form("style_form");private Select table_style = new Select("table_style","样式");private Checkbox table_hover = new Checkbox("table_hover", "高亮条");private Select page_size = new Select("page_size","每页(条)");addControl(style_form);style_form.setStyle("font-size", "10pt");style_form.setColumns(3);table_style.addAll(Table.CLASS_STYLES);table_style.setAttribute("onchange", "style_form.submit();");style_form.add(table_style);page_size.addAll(new String[]{"5","10","20","30"});page_size.setAttribute("onchange", "style_form.submit();");style_form.add(page_size);table_hover.setAttribute("onclick", "style_form.submit();");style_form.add(table_hover);初始化选项form后,还需要重写page的onPost和onRender方法,来保持表单选项状态和改变表格渲染状态。
  @Overridepublic void onPost() {style_form.saveState(getContext());}@Overridepublic void onRender() {table.setClass(table_style.getValue());table.setPageSize(Integer.parseInt(page_size.getValue()));table.setHoverRows(table_hover.isChecked());}这样就能顺利的完成效果了。
  

  Apache Click的表格组件还是很不错,对于用户自定义组件很给力。。





  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326976-1-1.html 上篇帖子: Apache Tomcat 6.0 Class Loader HOW-TO 下篇帖子: 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表