在现实生活中
我们需要一些系统提供输入拼音首字母
返回与其对应中文的功能
这样可以提高人机交互性以及提高系统的友好性
结合之前所做的portlet技术还有AJAX让我们在web应用这块来说说这个不是太复杂的应用吧
对于我们的汉字与拼音对应词库生成需要如下资源
首先要一个该系统所属的中文词库
一份汉字与拼音的对照表
接下来我们会用这个中文词库去匹配汉字与拼音对照表之中的数据找出与各个词语对应的拼音来然后在这个文件中文词语后面生成其对应的汉语拼音声母首字母序列
首先我们需要用汉字拼音对照表生成体统中文词库对应的拼音列表之后我们需要将这个拼音系统词库列表存储到内存之中考虑到效率等综合因素我们选取了TreeMap这个类它以其优秀的内部结构使得containsKey() get() put() 和 remove()等操作能够保持其时间复杂度在对数级上即logN为了能够保持拼音对应汉字的能够随着字母的增减而对应显示我们选用了TreeMap中的SubMap()方法其返回值是一个SortedMap对象这下面的代码使我从之前的OOo应用中取出的大家改改就可以用了
//XActionListener
publicvoidtextChanged(TextEventrEvent){
ObjectsearchTextBox=xControlContainer
getControl(searchText);
XTextComponentyText=(XTextComponent)UnoRuntimequeryInterface(
XTextComponentclasssearchTextBox);
searchString=yTextgetText();
searchString=searchStringtoLowerCase();
loggerdebug(searchStringis+searchString);
ObjectresultComboBoxModel=xControlContainer
getControl(resultComboBox);
XComboBoxxComboBox=(XComboBox)UnoRuntimequeryInterface(
XComboBoxclassresultComboBoxModel);
Objectlabel=xControlContainergetControl(Label);
XFixedTextxLabel=(XFixedText)UnoRuntimequeryInterface(
XFixedTextclasslabel);
charshiftChar=searchStringcharAt(searchStringlength());
shiftChar++;
StringtempString=searchStringsubstring(
searchStringlength());
tempString=tempString+shiftChar;
if(searchStringlength()==)
tempString=+shiftChar;
loggerdebug(tempStringis+tempString);
SortedMapshowMap=(SortedMap)chineseMedicalTermWithPropertyHash
subMap(searchStringtempString);
//xLabelsetText(chineseMedicalTermWithPropertyHashsize()+
//check);
xComboBoxremoveItems((short)(short));
shortj=;
Iteratorit=showMapentrySet(erator();
while(ithasNext()){
MapEntryme=(MapEntry)itnext();
Objectov=megetValue();
xComboBoxaddItem(ovtoString()j);
j++;
}
}
最重要的在这里
SortedMap showMap = (SortedMap) chineseMedicalTermWithPropertyHash
subMap(searchString tempString);
是从TreeMap实例中取出在length到length的所有关键字组成的一个SortedMap实例它的特性是
A map that further guarantees that it will be in ascending key order sorted according to the natural ordering of its keys (see the Comparable interface) or by a comparator provided at sorted map creation time This order is reflected when iterating over the sorted maps collection views (returned by the entrySet keySet and values methods) Several additional operations are provided to take advantage of the ordering (This interface is the map analogue of the SortedSet interface)
而对于AJAX部分来讲更是简单我们知道AJAX与一般的web应用区别就是在它使用了Javascript的一个对象XMLHttpResponse/XMLHttpRequest从而达到了异步的传输效果提高了人机交互性在本例中我们没有使用什么AJAX的框架而是直接使用了在html标签中最基本的javascript函数的方式来实现从而达到了异步响应的功能其中解决了一个问题现在说说那就是如果单单要实现AJAX传输数据不能够使用session来传输这样的效果总是会慢一拍为什么会这样呢?请大家想想过段时间答复)
至于portlet只要满足JSR的就行了难度不是太大只要把doView()方法覆盖了就没有大问题了的大家可以试试
本文依据《创作共用约定》之署名禁止派生非商业用途方式发布即你可以免费拷贝分发呈现和表演当前作品但是必须基于以下条款
署名你必须明确标明作者的名字
非商业用途你不可将当前作品用于商业目的
禁止派生你不可更改转变或者基于此作品重新构造为新作品
对于任何二次使用或分发你必须让其他人明确当前作品的授权条款
在得到作者的明确允许下这里的某些条款可以放弃