在現實生活中
我們需要一些系統提供輸入拼音首字母
返回與其對應中文的功能
這樣可以提高人機交互性以及提高系統的友好性
結合之前所做的portlet技術
還有AJAX
讓我們在web應用這塊來說說這個不是太復雜的應用吧
對於我們的漢字與拼音對應詞庫生成需要如下資源
首先要一個該系統所屬的中文詞庫
一份漢字與拼音的對照表
接下來我們會用這個中文詞庫去匹配漢字與拼音對照表之中的數據
找出與各個詞語對應的拼音來
然後在這個文件中文詞語後面生成其對應的漢語拼音聲母首字母序列
首先我們需要用漢字拼音對照表生成體統中文詞庫對應的
拼音列表
之後我們需要將這個拼音系統詞庫列表存儲到內存之中
考慮到效率等綜合因素
我們選取了TreeMap這個類
它以其優秀的內部結構使得containsKey()
get()
put() 和 remove()等操作能夠保持其時間復雜度在對數級上
即logN
為了能夠保持拼音對應漢字的能夠隨著字母的增減而對應顯示
我們選用了TreeMap中的SubMap()方法
其返回值是一個SortedMap對象
這下面的代碼使我從之前的OOo應用中取出的
大家改改就可以用了
// XActionListener
public void textChanged(TextEvent rEvent) {
Object searchTextBox = xControlContainer
getControl(searchText);
XTextComponent yText = (XTextComponent) UnoRuntime
queryInterface(
XTextComponent
class
searchTextBox);
searchString = yText
getText();
searchString = searchString
toLowerCase();
logger
debug(
searchString is
+ searchString);
Object resultComboBoxModel = xControlContainer
getControl(resultComboBox);
XComboBox xComboBox = (XComboBox) UnoRuntime
queryInterface(
XComboBox
class
resultComboBoxModel);
Object label = xControlContainer
getControl(
Label
);
XFixedText xLabel = (XFixedText) UnoRuntime
queryInterface(
XFixedText
class
label);
char shiftChar = searchString
charAt(searchString
length()
);
shiftChar++;
String tempString = searchString
substring(
searchString
length()
);
tempString = tempString + shiftChar;
if (searchString
length() ==
)
tempString =
+ shiftChar;
logger
debug(
tempString is
+ tempString);
SortedMap showMap = (SortedMap) chineseMedicalTermWithPropertyHash
subMap(searchString
tempString);
// xLabel
setText(chineseMedicalTermWithPropertyHash
size()+
// check
);
xComboBox
removeItems((short)
(short)
);
short j =
;
Iterator it = showMap
entrySet(erator();
while (it
hasNext()) {
Map
Entry me = (Map
Entry) it
next();
Object ov = me
getValue();
xComboBox
addItem(ov
toString()
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()方法覆蓋了就沒有大問題了的大家可以試試
本文依據《創作共用約定》之署名禁止派生非商業用途方式發布即你可以免費拷貝分發呈現和表演當前作品但是必須基於以下條款
署名你必須明確標明作者的名字
非商業用途你不可將當前作品用於商業目的
禁止派生你不可更改轉變或者基於此作品重新構造為新作品
對於任何二次使用或分發你必須讓其他人明確當前作品的授權條款
在得到作者的明確允許下這裡的某些條款可以放棄
From:http://tw.wingwit.com/Article/program/Web/201311/29851.html