﻿<?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@taobao</title><link>http://www.blogjava.net/lifesting/</link><description>Just Do It!</description><language>zh-cn</language><lastBuildDate>Fri, 01 May 2026 10:21:20 GMT</lastBuildDate><pubDate>Fri, 01 May 2026 10:21:20 GMT</pubDate><ttl>60</ttl><item><title>CloudQuery 一款基于 Web 的数据库客户端测试</title><link>http://www.blogjava.net/lifesting/archive/2021/03/16/CloudQuery.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Tue, 16 Mar 2021 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2021/03/16/CloudQuery.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/435826.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2021/03/16/CloudQuery.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/435826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/435826.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 杨建荣老师推荐的一款适合DBA和开发者的数据库工具，相当于web版的datagrip或者navicat，但比这些桌面软件更强大，还支持细粒度的管控&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2021/03/16/CloudQuery.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/435826.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> 2021-03-16 19:34 <a href="http://www.blogjava.net/lifesting/archive/2021/03/16/CloudQuery.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse中正则表达式删除所有注释</title><link>http://www.blogjava.net/lifesting/archive/2012/02/02/369251.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Thu, 02 Feb 2012 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2012/02/02/369251.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/369251.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2012/02/02/369251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/369251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/369251.html</trackback:ping><description><![CDATA[<span style="font-size: 12px;"><strong>表达式： /\*{1,2}[\s\S]*?\*/<br /><br />对应语言注释 /* a lot of words */ 或文档注释 /** more words */<br />其中 *因为是regular expression的meta word，需要转义。<br />Eclipse中的查找是不能设置单行或者多行的，即DOT . 不包含 \r \n，所以\s代替，？表示非贪婪，即碰到注释结束 */ 要停止<br /><br /></strong></span><img src ="http://www.blogjava.net/lifesting/aggbug/369251.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> 2012-02-02 17:25 <a href="http://www.blogjava.net/lifesting/archive/2012/02/02/369251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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>10</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>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>3</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>4</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>插件开发之：Common Navigator View (CNV) 通用导航试图</title><link>http://www.blogjava.net/lifesting/archive/2008/11/30/242634.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Sat, 29 Nov 2008 17:28:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/11/30/242634.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/242634.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/11/30/242634.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/242634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/242634.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一个实例完整的演示了Common Navigator View的开发过程。&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2008/11/30/242634.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/242634.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-11-30 01:28 <a href="http://www.blogjava.net/lifesting/archive/2008/11/30/242634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插件开发: 将View里面的对象托拽到Editor步骤</title><link>http://www.blogjava.net/lifesting/archive/2008/11/22/241723.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 21 Nov 2008 17:27:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/11/22/241723.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/241723.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/11/22/241723.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/241723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/241723.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过一个完整例子，系统的讲述了在Eclipse开发中怎么讲table/tree view里面的东西拖拽到text/graphical editor上。&nbsp;&nbsp;<a href='http://www.blogjava.net/lifesting/archive/2008/11/22/241723.html'>阅读全文</a><img src ="http://www.blogjava.net/lifesting/aggbug/241723.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-11-22 01:27 <a href="http://www.blogjava.net/lifesting/archive/2008/11/22/241723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下GTK+开发环境设置</title><link>http://www.blogjava.net/lifesting/archive/2008/11/17/240884.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Sun, 16 Nov 2008 16:28:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/11/17/240884.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/240884.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/11/17/240884.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/240884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/240884.html</trackback:ping><description><![CDATA[为了搞清linux下SWT与GTK+的映射机制，翻出老笔记本装了个Ubuntu，配置GTK+开发环境还是比较简单的。<br />
<br />
<ol>
    <li>安装必须要的东西</li>
    <ol>
        <li>安装JDK，使用命令：<span style="color: red;">sudo apt-get install sun-java6-sdk</span></li>
        <li>安装eclipse+CDT 5.0，我觉得CDT从5开始渐成气候了，作为一个eclipse开发者，我觉得他比kdevelop好用:)，遗憾的是在win下不支持msvc，只能通过mingw或cygwin</li>
        <li>安装gnome和gtk+开发库，使用命令：<span style="color: red;">sudo apt-get install libgtk2.0-dev libgnome2-dev</span> ,安装之后，所有相关的头文件和静态／动态库文件已经准备好了，不得不说apt-get真NB。</li>
    </ol>
    <li>测试一下</li>
    <ol>
        <li>头文件使用命令 <span style="color: red;">pkg-config --cflags gtk+-2.0</span>，正常情况下会出现一下结果：<br />
        -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1</li>
        <li>库文件使用命令 <span style="color: red;">pkg-config --libs gtk+-2.0</span>，正常情况下会出现一下结果：<br />
        -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 <br />
        </li>
    </ol>
    <li>启动Eclipse，新建一个c project，然后右键单击 properties-&gt;c/c++ build-&gt;Settings，在Tool Setting中将给GCC设置头文件目录以及链接库(还有一种做法是自定义make file，里面调用pkg-config，因为没有显式设置，cdt无法做静态分析，不能利用它的强大功能，比如索引，重构等）。</li>
    <ol>
        <li>设置头文件，点击GCC C Compiler－&gt;Directories，然后使用命令 <span style="color: red;">pkg-config --cflags gtk+-2.0 | sed 's/ /\n/g' &gt; include.txt</span>，然后使用命令 <span style="color: red;">sed 's/-I//g' include.txt</span>，依次将出现的每一行add到inclue path里面去。</li>
        <li>设置库，点击GCC C Linker-&gt;Libraries，然后如头文件操作一样使用命令<span style="color: red;">pkg-config --libs gtk+-2.0 | sed 's/ /\n/g' &gt; lib.txt</span>，然后使用命令 <span style="color: red;">sed 's/-l//g' lib.txt</span>，依次将出现的每一行添加到libraries里。<br />
        </li>
    </ol>
    <li>编写一个包含GTK+测试代码的C文件，添加到项目里面，内容如下：<!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <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, 0);">#include&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">gtk</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">gtk.h</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
    </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;destroy(GtkWidget</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">,&nbsp;gpointer);<br />
    </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;gboolean&nbsp;delete_event(GtkWidget</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">,&nbsp;GdkEvent</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">,&nbsp;gpointer);<br />
    </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;main(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;argc,&nbsp;</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">argv[])&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;GtkWidget&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">window,&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">label;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_init(</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">argc,&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">argv);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;window&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;gtk_window_new(GTK_WINDOW_TOPLEVEL);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_window_set_title(GTK_WINDOW&nbsp;(window),&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello&nbsp;World!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_container_set_border_width(GTK_CONTAINER&nbsp;(window),&nbsp;</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_widget_set_size_request(window,&nbsp;</span><span style="color: rgb(0, 0, 0);">200</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;Connect&nbsp;the&nbsp;main&nbsp;window&nbsp;to&nbsp;the&nbsp;destroy&nbsp;and&nbsp;delete-event&nbsp;signals.&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;g_signal_connect(G_OBJECT(window),&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">destroy</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;G_CALLBACK(destroy),&nbsp;NULL);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;g_signal_connect(G_OBJECT(window),&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">delete_event</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_CALLBACK(delete_event),&nbsp;NULL);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;Create&nbsp;a&nbsp;new&nbsp;GtkLabel&nbsp;widget&nbsp;that&nbsp;is&nbsp;selectable.&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;label&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;gtk_label_new(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello&nbsp;World</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_label_set_selectable(GTK_LABEL&nbsp;(label),&nbsp;TRUE);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;Add&nbsp;the&nbsp;label&nbsp;as&nbsp;a&nbsp;child&nbsp;widget&nbsp;of&nbsp;the&nbsp;window.&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_container_add(GTK_CONTAINER&nbsp;(window),&nbsp;label);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_widget_show_all(window);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_main();<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />
    }<br />
    </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;Stop&nbsp;the&nbsp;GTK+&nbsp;main&nbsp;loop&nbsp;function&nbsp;when&nbsp;the&nbsp;window&nbsp;is&nbsp;destroyed.&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
    </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;destroy(GtkWidget&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">window,&nbsp;gpointer&nbsp;data)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;gtk_main_quit();<br />
    }<br />
    </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;Return&nbsp;FALSE&nbsp;to&nbsp;destroy&nbsp;the&nbsp;widget.&nbsp;By&nbsp;returning&nbsp;TRUE,&nbsp;you&nbsp;can&nbsp;cancel<br />
    &nbsp;*&nbsp;a&nbsp;delete-event.&nbsp;This&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;confirm&nbsp;quitting&nbsp;the&nbsp;application.&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
    </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;gboolean&nbsp;delete_event(GtkWidget&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">window,&nbsp;GdkEvent&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 255);">event</span><span style="color: rgb(0, 0, 0);">,&nbsp;gpointer&nbsp;data)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;FALSE;<br />
    }<br />
    </span></div>
    <br />
    (以上代码来自图书 Foundation of GTK+ development)<br />
    然后运行，正常会显式如下：<br />
    <img alt="" src="http://www.blogjava.net/images/blogjava_net/lifesting/gtk-code.png" width="872" height="538" /></li>
</ol>
Ubuntu真是个好东西，耗的资源少，图形系统稳定，对开发人员及其友好，真的很强大。<br />
<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/240884.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-11-17 00:28 <a href="http://www.blogjava.net/lifesting/archive/2008/11/17/240884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个平庸程序员的想法。</title><link>http://www.blogjava.net/lifesting/archive/2008/10/31/237839.html</link><dc:creator>Always BaNg.</dc:creator><author>Always BaNg.</author><pubDate>Fri, 31 Oct 2008 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/lifesting/archive/2008/10/31/237839.html</guid><wfw:comment>http://www.blogjava.net/lifesting/comments/237839.html</wfw:comment><comments>http://www.blogjava.net/lifesting/archive/2008/10/31/237839.html#Feedback</comments><slash:comments>54</slash:comments><wfw:commentRss>http://www.blogjava.net/lifesting/comments/commentRss/237839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifesting/services/trackbacks/237839.html</trackback:ping><description><![CDATA[前天晚上，老婆和我偎在床上说悄悄话，大致的意思是所有她的同学都有房子了，有些还当上了管理人员，并带着少许调侃说我以后也就这样了，1年10多万，失业就会掉头发。<br />
<br />
我今年28，一个C++/Java程序员，跟大多数人一样，天资平平，虽然爱学习，但没有上一个好大学，工作这么几年也没有混上一个管理人员，有时候在自己看来，稍稍有些可悲。因为官本位的残留+农耕文化，在中国搞技术历来就是一个吃力不讨好的事情。搞技术意味着被人管，薪酬低，上升通道窄，所以好多技术人员包括优秀的总是希望能在一段时间以后转型，可是管理也是一门学问，控制社会关系不一定比控制计算机简单，所以彷徨且不时有受挫感。我也一样，有时候一个人看书的人总会想自己的理想到底是什么？什么才会让我觉得自己有存在价值？思来想去，我还是觉得自己是一个比较典型的程序员，喜欢写程序，喜欢调试，喜欢帮助别人，这些都能带给我快乐。既然认定了这条路线，就坚定地走下去，但只是想做技术人员还不够。<br />
<br />
我有过一位法国同事，技术人员40来岁，做测试写文档，放在中国来说是典型的失败。有次看了他写的详细测试报告，我不敢相信Excel能做出这么NB的东西出来，在我的赞扬之下他脸上荡漾着满足感。听他说自己做了十多年技术人员，觉得自己挺适合干这个，非常坦然，我有一种朴素的感动。这根我看到国内程序员普遍焦虑不一样(当然有社会保障因素),那就是专注于自己喜欢的，一直干下去。在兴趣和严格要求自己产出物的导引下，一个你认为不起眼的小事情也会让人感觉莫大的惊喜。岁月会让我们老去，但兴趣，专业的心态不会。我更希望在帮传代的过程中，用朴素的，职业的技术情节影响新生代程序员，推动行业的整体进步。<br />
<br />
你到底想干什么？这是一个问题。我看到好多人工作几年后还在今天groovy, 明天ruby，后天uml，然后是struts2，反正什么火跟什么。一天一天宝贵的时间再流逝，人也越来越焦虑，我不知道他们到底想要干什么，因为普通人是很难同时干好几件事情的。或许他们认为这些新鲜简单，学学就会，但我认为，不专业是技术人员最大的敌人。很久前我面试过一个开发人员，据说对struts非常精通，我就问 说说你怎么将jbpm集成到struts里面去，然后支支吾吾一大堆，貌似200+k的struts源代码都没有读过(我试验过，扩展webActionContext, 引用jbpmcontext，增加线程保护，扩展struts bean映射jbpm var)。就如同学groovy，但不知道它是通过什么样的语法翻译出来的(parser generator)；学ruby，不知怎样用C增加系统关联性，总在技术的外围打转，这样下去，焦虑就是一种必然了。我的想法就是抓住一种最感兴趣的，把它搞透，不要害怕哪一天这个技术被淘汰了，计算机越往下关联越大，周期越长。即使有时候因为工作的性质让我们在外围打转，我们也应该在兴趣点上持续深入，专业一点，更专业一点，即可以探奇得到满足感，也可以让你时时充满竞争力，说不定哪天就用上了。<br />
<br />
计算机的基础是编译+操作系统+数学，比如写一个高效的多线程程序，写一个调试器，写一个脚本语言。基础的基础是数学，所以要想专业必须趁年轻能看进去书的时候打好数学基础，即使不通透，也要知道概念。就拿我做的DSL的graphical editing来说，就包含解析几何、线形代数、立体几何、微积分、图论(离散数学)等学科，这还不包括DSL的Run/Debugger/Debuggee，Text Editing等。如果你做的工作感觉不到数学的存在，那很危险:)。曾经有人说&#8220;计算机是数学的艺术&#8221;，一点不假。<br />
<br />
但总是有些笨人比如我，小老头了还在看数值计算，概率等数学书，看到ms, google的requirements都不敢投简历，但没关系，只要能够按照自己定的目标逐步靠近，不断学习，不断挑战自我，肯定会有收获，无论物质上还是心理上。即使最终没有在IT史留下名字的一撇，人生也没有白活，因为我在自己站着的土地上认真地来过。<br />
<br />
爱就努力的去做吧，愿每个程序员都能有坚强的信念和一片属于自己的天空！<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/lifesting/aggbug/237839.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-10-31 17:37 <a href="http://www.blogjava.net/lifesting/archive/2008/10/31/237839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>