﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BaNg</title><link>http://www.blogjava.net/lifesting/</link><description>Just Do It!</description><language>zh-cn</language><lastBuildDate>Sun, 05 Jul 2009 10:38:43 GMT</lastBuildDate><pubDate>Sun, 05 Jul 2009 10:38:43 GMT</pubDate><ttl>60</ttl><item><title>做了一个JSF表格组件，分享源代码！</title><link>http://www.blogjava.net/lifesting/archive/2009/07/04/285453.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Sat, 04 Jul 2009 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2009/07/04/285453.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/285453.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2009/07/04/285453.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/285453.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/285453.html</trackback:ping><description><![CDATA[周二，我兴匆匆去老刘那演示RichFaces的Table控件，可老刘说了，RichFaces太复杂，不适合我们，且还有不少的bug(这些我无法考证:)。于是他拿出一个使用了一堆JSP+Servelet+Bean写的一个表格，跟说我，我很怀疑JSF能做出这个东西来，你使用纯JSF做一个一样的表格组件我就相信JSF能够用在开发平台(注:我是此Eclipse开发平台的兼职架构师)上。我心里琢磨，既然你是用JSP/Servlet搞出来的，而JSF是基于Servlet的技术，怎么可能实现不了呢？ 三天做出来！我一直相信，技术在于使用技术的人，而不是技术本身。<br />
<br />
<span style="font-size: 18pt;">
<span style="color: red;"><a href="http://gefexample.googlecode.com/files/jsftry.tar.gz">下载</a></span> </span><br />
<br />
先看图吧：<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/lifesting/09/table.jpg" border="1" height="761" width="625" /><br />
<br />
再看看对应的JSF标记<br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">html&nbsp;</span><span style="color: rgb(255, 0, 0);">xmlns</span><span style="color: rgb(0, 0, 255);">="http://www.w3.org/1999/xhtml"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:h</span><span style="color: rgb(0, 0, 255);">="http://java.sun.com/jsf/html"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:f</span><span style="color: rgb(0, 0, 255);">="http://java.sun.com/jsf/core"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:ui</span><span style="color: rgb(0, 0, 255);">="http://java.sun.com/jsf/facelets"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:cby</span><span style="color: rgb(0, 0, 255);">="http:/www.lifesting.com/jsf"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ui:composition&nbsp;</span><span style="color: rgb(255, 0, 0);">template</span><span style="color: rgb(0, 0, 255);">="/tpl.xhtml"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ui:define&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="pageTitle"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">表格展示</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ui:define</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ui:define&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="pageHeader"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">国家</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ui:define</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ui:define&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="body"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">h:form</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">h:panelGrid&nbsp;</span><span style="color: rgb(255, 0, 0);">columns</span><span style="color: rgb(0, 0, 255);">="1"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">h:message&nbsp;</span><span style="color: rgb(255, 0, 0);">for</span><span style="color: rgb(0, 0, 255);">="mytable"</span><span style="color: rgb(255, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">h:panelGrid</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:rns&nbsp;</span><span style="color: rgb(255, 0, 0);">text</span><span style="color: rgb(0, 0, 255);">="页面设置"</span><span style="color: rgb(255, 0, 0);">&nbsp;tableFor</span><span style="color: rgb(0, 0, 255);">="mytable"</span><span style="color: rgb(255, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:filter&nbsp;</span><span style="color: rgb(255, 0, 0);">text</span><span style="color: rgb(0, 0, 255);">="过滤策略"</span><span style="color: rgb(255, 0, 0);">&nbsp;tableFor</span><span style="color: rgb(0, 0, 255);">="mytable"</span><span style="color: rgb(255, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:delete&nbsp;</span><span style="color: rgb(255, 0, 0);">tableFor</span><span style="color: rgb(0, 0, 255);">="mytable"</span><span style="color: rgb(255, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:table&nbsp;</span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="mytable"</span><span style="color: rgb(255, 0, 0);">&nbsp;var</span><span style="color: rgb(0, 0, 255);">="rec"</span><span style="color: rgb(255, 0, 0);">&nbsp;checkable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);">&nbsp;idField</span><span style="color: rgb(0, 0, 255);">="code"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bean</span><span style="color: rgb(0, 0, 255);">="Country"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:column&nbsp;</span><span style="color: rgb(255, 0, 0);">field</span><span style="color: rgb(0, 0, 255);">="name"</span><span style="color: rgb(255, 0, 0);">&nbsp;sortable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);">&nbsp;filterable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: rgb(0, 0, 255);">="200"</span><span style="color: rgb(255, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 255);">="名称"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">h:outputText&nbsp;</span><span style="color: rgb(255, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">="#{rec.wrapped.name}"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">h:outputText</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">cby:column</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:column&nbsp;</span><span style="color: rgb(255, 0, 0);">field</span><span style="color: rgb(0, 0, 255);">="region"</span><span style="color: rgb(255, 0, 0);">&nbsp;sortable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);">&nbsp;filterable</span><span style="color: rgb(0, 0, 255);">="false"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: rgb(0, 0, 255);">="100"</span><span style="color: rgb(255, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 255);">="区域"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">h:outputText&nbsp;</span><span style="color: rgb(255, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">="#{rec.wrapped.region}"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">h:outputText</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">cby:column</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:column&nbsp;</span><span style="color: rgb(255, 0, 0);">field</span><span style="color: rgb(0, 0, 255);">="surfaceArea"</span><span style="color: rgb(255, 0, 0);">&nbsp;sortable</span><span style="color: rgb(0, 0, 255);">="false"</span><span style="color: rgb(255, 0, 0);">&nbsp;filterable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: rgb(0, 0, 255);">="150"</span><span style="color: rgb(255, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 255);">="表面积"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">h:outputText&nbsp;</span><span style="color: rgb(255, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">="#{rec.wrapped.surfaceArea}"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">h:outputText</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">cby:column</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:column&nbsp;</span><span style="color: rgb(255, 0, 0);">field</span><span style="color: rgb(0, 0, 255);">="population"</span><span style="color: rgb(255, 0, 0);">&nbsp;sortable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);">&nbsp;filterable</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: rgb(0, 0, 255);">="100"</span><span style="color: rgb(255, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 255);">="人口"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">h:outputText&nbsp;</span><span style="color: rgb(255, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">="#{rec.wrapped.population}"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">h:outputText</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">cby:column</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">cby:ds&nbsp;</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">cby:table</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">h:form</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ui:define</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ui:composition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">html</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
因为开发平台最终是以BO为核心，所以此表格组件是通过设置 bean，然后再通过Hibernate来获取数据的。<br />
<br />
这个组件除采用JSF +Facelet之外，没有其它页面技术，代码简洁，无抽象，且里面还有注释，初学者可以参考一下。<br />
<br />
主要功能：<br />
1 设置column的filterable属性(true/false)来过滤数据(目前实现为左匹配，比如输入Sa，就是Sa开头的)<br />
2 分页导航<br />
3 设置column的sortable属性(true/false)用来对某列进行 正/反 排序<br />
4 改变页记录大小，默认为20条/页<br />
5 设置table的checkable属性为true，表格将会多一列用来选择。<br />
6 可以批量删除被checked的记录。<br />
<br />
这个组件只考虑了功能，并没有考虑到美观，如果你觉得可以用，改改它的html属性设置。<br />
<br />
安装：<br />
<br />
1 附件是一个Maven项目，必须安装有maven。<br />
2 安装MySQL数据库，启动MySQL，运行 <br />
create database world<br />
3 找到项目下面的world.sql，假设其路径为/a/b/c/world.sql，使用MySQL的source命令<br />
use world<br />
source /a/b/c/world.sql<br />
4修改项目下的hibernate.cfg.xml中MySQL数据库用户名/密码。<br />
5 执行mvn jetty:run 启动<br />
6 浏览器输入 http://localhost:8080/jsftry/ 就可以看到效果了<br />
<br />
关于调试：<br />
1 下载一个Eclipse JEE版本<br />
2&nbsp; 在项目目录下执行 mvn eclipse:clean eclipse:eclipse -DdownloadSources=true -Dwtpversion=1.5<br />
3 在eclipse workspace中import此项目<br />
<br />
虽然工作中不用Java很久了，但拿起来玩玩还是觉得Java真的很有生产力。JSF，Hibernate，Maven，Eclipse一个比一个牛比。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/285453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2009-07-04 13:22 <a href="http://www.blogjava.net/lifesting/archive/2009/07/04/285453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux批量删除某种类型进程</title><link>http://www.blogjava.net/lifesting/archive/2009/06/27/284360.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 26 Jun 2009 16:07:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2009/06/27/284360.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/284360.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2009/06/27/284360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/284360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/284360.html</trackback:ping><description><![CDATA[<br />
ps ax | grep &#8216;$VAR&#8216; | awk '{print $1}' | xargs kill<br />
<br />
其中$VAR为某个值<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/284360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2009-06-27 00:07 <a href="http://www.blogjava.net/lifesting/archive/2009/06/27/284360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hello, dreamweaver! (PART 2)</title><link>http://www.blogjava.net/lifesting/archive/2009/06/18/283073.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Thu, 18 Jun 2009 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2009/06/18/283073.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/283073.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2009/06/18/283073.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/283073.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/283073.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开发dreamweaver extension，即dreamweaver插件&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2009/06/18/283073.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/283073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2009-06-18 17:02 <a href="http://www.blogjava.net/lifesting/archive/2009/06/18/283073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hello, dreamweaver! (Part 1)</title><link>http://www.blogjava.net/lifesting/archive/2009/06/17/267958.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Wed, 17 Jun 2009 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2009/06/17/267958.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/267958.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2009/06/17/267958.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/267958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/267958.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开发Dreamweaver extension&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2009/06/17/267958.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/267958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2009-06-17 17:24 <a href="http://www.blogjava.net/lifesting/archive/2009/06/17/267958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF社区捐献的一个图形旋转(Rotation)的例子</title><link>http://www.blogjava.net/lifesting/archive/2009/02/20/255789.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 20 Feb 2009 03:04:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2009/02/20/255789.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/255789.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2009/02/20/255789.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/255789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/255789.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 实现GEF开发中的图形旋转的一个解决方案&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2009/02/20/255789.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/255789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2009-02-20 11:04 <a href="http://www.blogjava.net/lifesting/archive/2009/02/20/255789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搞Eclipse开发的Fellow都来露一个脸吧，谢谢！</title><link>http://www.blogjava.net/lifesting/archive/2009/02/04/253227.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Wed, 04 Feb 2009 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2009/02/04/253227.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/253227.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2009/02/04/253227.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/253227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/253227.html</trackback:ping><description><![CDATA[先说下我自己，David BY Chan，28岁，在北京，2002年正式接触计算机程序，2003年底开始自学Eclipse开发，目前在一家研究所做仿真。基础杂实，为人低调，乐于助人，Eclipse Newsgroup上的David BY Chan就是我，呵呵，在上面少见到中国人。我擅长的方面有主要有Workbench UI, EMF, GEF/GMF, Debugger(Not Debugging)，对JDT/CDT/DTP/WTP也略有了解，感觉Eclipse太庞大了，经常碰到一些问题要调试很久。很想认识一些做Eclipse开发的，大家在交流的同时，累积的知识互为补充，共同进步。<br />
<br />
我的邮箱是： lifesting%gmail.com (replace % with @), msn id is step.in%hotmail.com<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/253227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2009-02-04 13:10 <a href="http://www.blogjava.net/lifesting/archive/2009/02/04/253227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>还真有一个Java AST View</title><link>http://www.blogjava.net/lifesting/archive/2008/12/19/247415.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 19 Dec 2008 15:36:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/12/19/247415.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/247415.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/12/19/247415.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/247415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/247415.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java ast view和java element view&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2008/12/19/247415.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/247415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-12-19 23:36 <a href="http://www.blogjava.net/lifesting/archive/2008/12/19/247415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>项目实践论证</title><link>http://www.blogjava.net/lifesting/archive/2008/12/15/246459.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Mon, 15 Dec 2008 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/12/15/246459.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/246459.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/12/15/246459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/246459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/246459.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 模型驱动JEE项目论证过程，不断更新。&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2008/12/15/246459.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/246459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-12-15 17:10 <a href="http://www.blogjava.net/lifesting/archive/2008/12/15/246459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>着手开始准备我的第一个项目</title><link>http://www.blogjava.net/lifesting/archive/2008/12/12/246041.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 12 Dec 2008 14:16:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/12/12/246041.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/246041.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/12/12/246041.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/246041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/246041.html</trackback:ping><description><![CDATA[软件开发的一个态势是迅捷，MDA(模型驱动架构)渐露头脚，火爆的RoR也只是MDA的初级模式，典型的比如代码合并和工具支持不够，模型的概念不够清晰。国内应用比较广的普元也包含类似想法，只不过有些忽略掉了&#8220;程序员&#8221;这个核心角色。<br />
<br />
我想要做的一个东西就是以模型为中心的开发方式，它被&#8220;隐藏&#8221;在Eclipse里面。比如日常我们做的企业开发大部分是以业务层BO为核心，然后向下延伸至存储，向上有service/service control/page control/page之类，那么通过一套可编程模板（即Template DSL)+代码生成器就可以生成想要的各个层的代码了，其本质上是一个UML图形建模工具，上面绑定模板，模板的编写提供类似JDT(提供在Eclipse编写/调试Java代码的插件集)的高亮/纠错，重构等，代码生成过程可以被运行或者单步调试。<br />
<br />
MDA在Eclipse社区的推动下，日渐成熟，以EMF metamodel描述的UML2足够强大，在技术完全可行，德国的oaw，法国的acceleo都有成熟的应用。<br />
<br />
我做这个的想法就是帮程序员摆脱繁重琐碎的比如javabean, html, configuration等。<br />
<br />
商业模式就是使用免费+收费专业培训支持。<br />
<br />
有同仁在搞MDA类似的开发么？欢迎提出宝贵意见。<br />
<br />
<strong>如果你是一个多层JavaEE的开发者，每天被spring, hibernate, jdbc, structs/jsf/xxx, html折磨，最希望共帮你解决那些问题呢？谢谢。</strong><br />
<br />
Update: Just do it，先去尝试一把，做一个版本出来，谢谢关注。<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/246041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-12-12 22:16 <a href="http://www.blogjava.net/lifesting/archive/2008/12/12/246041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF的几种编辑方式</title><link>http://www.blogjava.net/lifesting/archive/2008/12/10/245449.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Wed, 10 Dec 2008 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/12/10/245449.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/245449.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/12/10/245449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/245449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/245449.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Eclipse Modeling  Framework  (EMF)的三种编缉方式。&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2008/12/10/245449.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/245449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifesting/" target="_blank">Always BaNg.</a> 2008-12-10 11:36 <a href="http://www.blogjava.net/lifesting/archive/2008/12/10/245449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>