2010年9月17日星期五

在项目中Struts2的form需要由变量来定义。如果使用
通过这个%{#variableName} 可以解决这个问题。

比如:

2010年6月9日星期三

运行时改变log4j属性。

log4j特性一般由配置文件决定,如果需要在运行时进行改变,可以通过以下类似的方法解决:

Appender appender = Logger.getRootLogger().getAppender("devLogFile");
RollingFileAppender fa = (RollingFileAppender) appender;
fa.setMaxFileSize(logSizeStr);
fa.activateOptions();

2009年8月24日星期一

RCP 编程记录

RCP Perspective中View的布局
Perspective用于把一组任务相关的视图组合在一起提供给用户,其中有个区域叫做EditorArea,这个区域用于放置编辑器。
如果你的perspective无需编辑器,则可以通过pageLayout.setEditorAreaVisible(false);把编辑区域隐藏起来。这样,你的workspace就不会有一块灰色的区域了。

如果想让两个view占据一个位置(如IPageLayout.RIGHT),在Perspective类中的createInitialLayout用如下方法:
IFolderLayout folder = layout.createFolder("messages", IPageLayout.RIGHT,
0.75f, IPageLayout.ID_EDITOR_AREA);
folder.addPlaceholder(View1.ID + ":*");
folder.addView(View1.ID);
folder.addPlaceholder(View2.ID + ":*");
folder.addView(View2.ID);

要使得一开始view不可见,只当用户点击触发showView的时候才显示,可以如下:folder.addPlaceholder(View1.ID + ":*");
不要加上folder.addView(View1.ID)就可以了。
如果要使得Editor消失不可见,可以在Perspective类中的createInitialLayout加上一句,如下:
layout.setEditorAreaVisible(false);
如果要使得某个view不能关闭,可以在Perspective类中的createInitialLayout加上一句,如下:
layout.getViewLayout(View.ID).setCloseable(false);


TableListViewer的可编辑cell
按照一般的套路:设置tableviewer的columnProperties;设置CellEditors;设置CellModitifier;
其中实现ICellModitifier接口比较繁琐点。
最后值得注意的是:需要把ListTableView设置为SWT.FULL_SELECTION。否则,就必须单击两次,第一次表示选中,第二次表示编辑。

2009年8月6日星期四

用spring构造bean的3种方法。

1)直接构造
2)用静态工厂方法
3)非静态工厂方法。

这是一段静态工厂方法的例子,向工厂方法传递参数使用constructor-arg。

类功能的分配

开始写了个TclExecutor类。这个类可以执行tcl语句、tcl 文件。因为tcl interpreter是在这个类中创建的,interpreter是用一个线程在后台驱动的,所以我把TclExecutor当作资源类。是资源的东西,当然是要被管理的,否则就有资源泄漏的危险。所以,我就加入了结束tcl executor生命的方法disposeI(), disposeAll()。
因为要管理这些资源,又让TclExecutor的构造函数接受一个字符串当作executor的名字。以后就可以用名字来定位需要的executor。
为了定位,就需要一个管理类来管理这些executors。可以把这些管理executor的方法通通写到TclExecutor 中,也可以单独写一个manager类。

当代码紧凑不是优点而是缺点时,就已经没有理由不把这些功能分别安排到不同的类中了。

2009年8月1日星期六

setup svnserver for windows

1)从http://subversion.tigris.org/ 下载svnserver.

2)创建一个reaml svnadmin create E:\svn_repository\dahui

3)在新的reaml下的conf目录中,配置密码及其它。
passwd文件:
[users]
admin = mypassword

svnserver.conf文件:
[general]
anon-access = read
auth-access = write
password-db = passwd
realm = goreader

2009年7月21日星期二

clone 和copy/paste

今天需要写一个copy/paste的功能。copy的动作执行以后得到都是data的reference。需要一个clone的动作。而以前的数据对象根本没有定义clone()。
可以总结一条了:当一个数据对象需要被copy/paste时,请准备好clone()方法。

对于糟糕的遗留系统的补丁,我真的觉得是浪费生命。平时觉得稀松平常的原理,在这种系统面前凸显价值,但是,这种价值此时也只能成为教训了。

今天还给诺西的同事show了一下如何用itcl写spirent testcenter的tcl。 如果当初他们写tcl之前好好建模,好好学习itcl,现在对新需求的应付应该是很轻松,很轻松了。

一个项目的成功也许是因为技术的失败而失败。但是,归根结底是因为管理的失败而失败,决策的失败而失败,用人的失败而失败。
技术上的保障只是项目成功保障链条上的最后一环,前面的环节更具决定性。

面向对象的方法是一种思考问题、解决问题的方法,不单纯的是一种语言。