置顶随笔
通常情况下,用户应该在简单字段(例如文本字段或组合框)中提供文本信息。虽然用来填充这些字段的应用程序代码通常比用来填充复杂窗口小部件(例如表或树)的代码简单得多,但这些“简单”字段通常会给用户带来更多负担。用户必须确定哪些字段需要内容、某个字段是否包含有效内容以及应该选择哪些选项。JFace 的字段辅助支持提供了一些类来帮助指导用户完成输入任务。 org.eclipse.jface.fieldassist包提供了二种方式的辅助。带修饰字段支持允许您提供图像修饰,以便向用户提供有关特定字段状态的提示。内容建议支持允许您提供内容辅助弹出窗口,以便向用户提供内容选项。 下面了解一下关于内容建议部分。 一般的IDE工具都有内容建议的功能,比如很常见的Java编辑器,输入“.”之后就会激活一个窗口,从里面可以选择方法或字段,这个功能可以快速高效地完成代码,而且可以减少很多输入错误。jface的fieldassist提供了对这个功能的支持。 我们做一个demo,先看一下这个demo的效果。 当按下Alt + '/'的时候,弹出内容辅助的窗口。从中可以选择相应的建议,进行快速输入。 下面是相应的代码,非常简单。
按照帮助文档的描述如下:为了在用户从弹出窗口中选择建议时获取和设置控件内容,必须向适配器提供 IControlContentAdapter 实例,该实例可以检索和设置特定类型控件的内容。对于文本字段来说,可以使用 TextContentAdapter 类。但是,也可以灵活地实现 IControlContentAdapter,以便将内容建议适配器与任何其他类型的控件配合使用。 关键是定义ContentProposalAdapter类,它有几个必须的参数,第一个是需要进行内容辅助的控件,第二个是IControlContentAdapter 实例,jface默认提供了二个实现:ComboContentAdapter, TextContentAdapter。按照上面的建议,如果你需要更加高级的功能,那么得实现IControlContentAdapter。第四个是IContentProposalProvider的实例,这是提供内容辅助窗口中的内容提供器的接口,jface只实现了一个SimpleContentProposalProvider,这是最简单的只提供文本内容的内容提供器。同样的,你可以继承IContentProposalProvider来实现更高级的功能。 keyStroke是定义按下什么键时激活该提示。autoActivationCharacters是定义当输入遇到什么符号时会激活提示的字符数组。 按照帮助文档的说明,可以在任意控件上安装 ContentProposalAdapter 以提供此行为。需要什么样的高级功能,就必须具体实践一下以上几个接口的实现。一般的编辑器都会配合SoucreViewer来提供这些功能。
posted @ 2007-11-02 17:28 寒武纪 阅读(869) | 评论 (4) | 编辑 收藏
2008年8月29日
posted @ 2008-08-29 17:07 寒武纪 阅读(2510) | 评论 (3) | 编辑 收藏
2008年8月21日
posted @ 2008-08-21 11:29 寒武纪 阅读(1042) | 评论 (0) | 编辑 收藏
2008年7月31日
posted @ 2008-07-31 15:13 寒武纪 阅读(1135) | 评论 (5) | 编辑 收藏
2008年7月16日
setQueryString(NameValuePair[] params)
void
setQueryString(String queryString)
posted @ 2008-07-16 10:31 寒武纪 阅读(1229) | 评论 (2) | 编辑 收藏
2008年6月11日
Jakarta的httpclient3.1是最新版本,项目中需要用程序模拟浏览器的GET和POST动作。在使用过程中遇到不少问题。 1. 带附件的POST提交 最开始都是使用MultipartPostMethod这个类,现在已经废弃这个类了。API说明:Deprecated. Use MultipartRequestEntity in conjunction with PostMethod instead. 使用PostMethod可以实现的功能,就没有必要再弄一个MultipartPostMethod了。下面是一段最简单的示例:
MultipartRequestEntity
PostMethod
posted @ 2008-06-11 15:18 寒武纪 阅读(2587) | 评论 (3) | 编辑 收藏
2008年6月3日
posted @ 2008-06-03 17:27 寒武纪 阅读(5359) | 评论 (3) | 编辑 收藏
2008年5月30日
Eclipse3.3出来很久了,一直都使用英文版,刚好看到有网友介绍Eclipse的一个Project,叫Babel,官方的描述这样:Eclipse is a global community. It is in everyone's interest to ensure that Eclipse is available and translated in as many locales as possible. 项目的主页地址是:http://www.eclipse.org/babel/ 。按照说明从这里可以下载安装到语言包。 直接从Eclipse3.3的菜单"Help --> Software Updates --> Find and Insatll...",新建一个远程站点,URL为 http://download.eclipse.org/technology/babel/update-site/ ,然后直接在线安装。在弹出的语言选择界面上选择中文简体。如下图:
网络情况如果正常的话,安装应该不会有问题的,中间可能会弹出几次下载jar文件失败的对话框,继续retry就行。 最后重启一下,可以看到都变成中文界面的。 原来是3.3的Eclipse,怎么变成3.2呢?原因估计是语言插件的版本是3.2的导致的,所以你看到有一些地方汉化并不完全,像Error Log视图的标题,项目右键菜单,以及一些顶级菜单都没有完全汉化。 希望以后Babel项目后面更新跟得上主版本的变化,不过习惯了英文版的,其实也是差不多的。
posted @ 2008-05-30 15:44 寒武纪 阅读(10199) | 评论 (13) | 编辑 收藏
2008年5月23日
readPassword()
posted @ 2008-05-23 09:41 寒武纪 阅读(1594) | 评论 (1) | 编辑 收藏
2008年5月8日
刚好最近项目中需要用到一点加密的东西,java安全类库提供了一个java.security.MessageDigest类,此 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。有现成的当然是最好的,省事省力。 MD5的非常有实际应用性。有网友给出这样的描述,可以参照一下:http://blog.csdn.net/Daping_Zhang/archive/2005/05/28/382688.aspx 该类的getInstance(String algorithm) 方法返回一个MessageDigest的实体,加密的一系统的digest()方法和update(byte input)方法。加密后返回一个byte[],16位,我们经常见到很多开源网站的下载地址会有一个[md5]的链接,打开其实就是一小段文本内容。例如: MD5 (commons-logging-1.1.1-bin.zip) = f88520ed791673aed6cc4591bc058b55 这是Jakarta的logging组件下载时提供的MD5摘要信息,是对这个zip包进行全文加密生成的摘要,摘要码就是后面的f88520ed791673aed6cc4591bc058b55,如果你下载以后,按照MD5的算法生成自己的摘要,如果这二个摘要一样,就证明这个文件是没有被人篡改过的。 遇到的问题是Java的MessageDigest类执行后返回的byte[16]得转换成十六进制的字符串,如果直接用new String(byte[]),得到的结果将是不正确的。算法有很多网友提供了,照搬了。比较有趣的是,commons-logging提供的那个MD5居然和我自己生成的不一样(难道文件被修改过?),后来尝试了其它地方提供的MD5码,都没有问题。 有很多相关的现成代码,搜集了一下整理如下(经过验证):
getInstance(String algorithm)
digest()
update(byte input)方法。加密后返回一个byte[],16位,我们经常见到很多开源网站的下载地址会有一个[md5]的链接,打开其实就是一小段文本内容。例如:
posted @ 2008-05-08 15:02 寒武纪 阅读(2036) | 评论 (2) | 编辑 收藏
2008年5月6日
一般而言,我们平常接触的大多数项目都应该是单纯使用B/S或是C/S,除非在特殊场合,否则比较少混合使用B/S,C/S架构。首先说一下对这二种架构特点的一些个人理解。B/S应该是目前很多项目都应用的架构,浏览器的方式使得用户的使用十分方便,用户可以何时何地通过Internet访问URL而进行相应的工作,升级维护也能比较集中,缺点就是浏览器的表现能力受限以及常常受非议的安全性问题,如果软件的应用范围区域不集中,而且用户经常变换地点进行访问,那么这种架构是非常适合的。C/S架构的C端有非常强的处理能力,所以在交互表现和安全方面可以做得比浏览器强,但是缺点也是非常明显的,安装部署、升级维护、版本兼容都是比较头大的事情,一般的适用场景是集中的办公室场所,用户使用范围相对稳定,以及一些对业务处理非常复杂的场合,为了降低服务器的负荷,同样需要C模式的支持。 以前接触过的电信领域,就有过混合架构的软件。但是都是非常宠大,一直都对其实现方案比较感兴趣,但是都没有机会进一步了解。最近搜索了一下相关的资料,总结一下混合应用的一些想法(只针对Java方向)。 ①混合架构的问题集中点。服务端共享,客户端采用不同的表现方式,共享的应该是业务层接口,持久层应该是屏蔽的。应用层的消息传递就是整个应用的关键所在,虽然像Jakarta提供的httpClient这种模仿浏览器的组件,但是毕竟是模仿,在很多方面的功能还是缺失的。 ②最传统的方式是采用EJB做为服务,这个宠然大物容易让人害怕,不过在分布式的系统中它还是有应用优势的,像电信和金融这种行业应用还是比较广的,而且现成的中间件和应用服务器商都比较多,像Oracel、BEA、IBM、Sun都有成熟的应用产品,当然开发的成本和人力投入也是恐龙级数据的。 ③有网友说在C端直接访问数据库,B/S结构不变,也就是通过数据库进行共享。这种方式是不可取的,二个缺点:把服务器的业务逻辑搬到了C端上,严格上讲是不安全的,升级维护也非常麻烦;并发控制的压力都在数据库上。 ④采用RMI,这个老古董相信应该很多人都不使用了,因为它的使用要一连串的手续,比如服务接口定义必须实现Remote接口,服务Server在实现时必须继承UnicastRemoteobject类,必须使用rmic指令产生stub和skeleton等,设置上繁杂。 ⑤Spring 远程服务。这个应该说是比较可取的,大家都比较喜欢轻量级的东西。就如第一点所说的,通过远程服务,我们可以在客户直接调用服务端的服务接口,就像本地调用一样,Spring对远程服务提供了好几种实现方案。 ⑥WebService。适合异构环境,但是WSDL的这种方式相对来说会比较耗费资料,因为标准定义除了业务内容外,还有许多另外的说明内容。 Spring远程服务实现方案介绍: ⑴Spring + RMI。Spring把传统的RMI方式的繁杂设置去掉,只要配置Bean文件就和定义服务接口可以。RMI的服务启动和管理都交给Spring来处理。RMI访问的缺点就是对防火墙的穿透力比较差。 ⑵Spring + Caucho的Hessian、Burlap。Hessian使用Http将对象以中性的二进制消息进行传送,而不像RMI使用Java的序列化格式(这种序列化是专制的,不是Sun提供的序列化机制),由于是二进制消息,所以不受限于某种实现语言,传输时所需要的带宽较小是其优点。Burlap是以XML文件格式传送对象,XML文件有较高可读性,应用程序只要能解释XML就能接收消息,当然也不限于某种语言,但是组装XML和解释XML都需要消耗资源,当传输大数据时性能应该存在问题。 ⑶Spring + Http Invoker。由于Hessian的序列化机制不是正统的Java序列化机制,所以当遇到传输复杂的业务模型时,就会存在各种问题,为此,Spring又提供了Http Invoker,同样是使用Http传送对象,而且是使用Java的序列化机制。相比RMI,Http对防火墙的穿透力要强。 后来尝试了最后的这种Http Invoker方式,是在Spring2.0版本下尝试的,开发非常简单,网上也有大量的资料介绍。应该说从这里入口可以做一些尝试。目前遇到的一个项目就需要混合架构,B/S采用Spring2 + Struts2 + Hiberntae3,浏览器只提供一些查询功能和数据展现,C端采用Eclipse的RCP平台,共享服务器的业务接口,调用就采用Http Invoker远程服务,复杂的业务功能都集中在C端上。
posted @ 2008-05-06 12:43 寒武纪 阅读(3150) | 评论 (21) | 编辑 收藏
Powered by: BlogJava Copyright © 寒武纪