龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

基于AJAX和JSF打造丰富的互联网组件之应用篇(1)(2)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
列表3―doChange函数 projsf.jdj.doChange = function(event,doSuggestURL){ var input = (event.srcElement || event.target); var inputId = input.id; var context = { _inputId: inputId }; net.java.dev.
列表3―doChange函数

projsf.jdj.doChange = function(event,doSuggestURL){
var input = (event.srcElement || event.target);
var inputId = input.id;
var context = { _inputId: inputId };
net.java.dev.mabon.send({ url: doSuggestURL,
args: [input.value],
callback: function(result) {
projsf.jdj._callback.call(context,result);} });
return true;
}

列表4:_callback函数

projsf.jdj._callback = function(results){
var inputId = this._inputId;
var input = document.getElementById(inputId);
var div = document.getElementById(inputId + "$suggest");
if (results.length <= 1) {
div.style.display = "none";
return;
}
//从上下文中得到输入域ID
var input = document.getElementById(inputId);
div.style.width = input.offsetWidth;
while (div.firstChild) {
div.removeChild(div.firstChild);
}
for (var i=0; i < results.length; i++) {
var row = document.createElement("div");
var span = document.createElement("span");
var text = document.createTextNode(results[i]);
row.className = "HtmlInputSuggestRow";
row.appendChild(text);
row.onmouseover = new Function("event",
"projsf.jdj._doMouseOver(event ||
window.event)");
row.onclick = new Function("event",
"projsf.jdj._doMouseClick(event ||
window.event)");
div.appendChild(row);
}
div.firstChild.className = "HtmlInputSuggestActiveRow";
div.style.display = "block";
window.setTimeout("projsf.jdj._selectText('" + inputId + "', " +
"'" + input.value + "', " +
"'" + results[0] + "')",
200);
}

列表5:_selectText函数

projsf.jdj._selectText=function(inputId,initialValue,suggestion){
var input = document.getElementById(inputId);
if (input.value != initialValue)
return;
if (input.value == suggestion) return;
if (input.createTextRange)//IE特定的
{
var selectionStart = input.value.length;
input.value = suggestion;
var range = input.createTextRange();
range.moveStart("character", selectionStart);
range.moveEnd("character", input.value.length);
range.select();
}
else //DOM兼容的
{
var selectionStart = input.value.length;
input.value = suggestion;
input.selectionStart = selectionStart;
input.selectionEnd = input.value.length;
}
}

列表6.HtmlInputSuggestRenderer的encodeBegin()方法

package com.apress.projsf.jdj.render.html;
Import ...//(省略)
/**
*HtmlInputSuggestRenderer用自动建议的行为生成一个传统的HtmlInputText域
*.
*/
public class HtmlInputSuggestRenderer extends HtmlRenderer{
//...
public static String TITLE_ATTR = "title";
public static String DO_SUGGEST_ATTR = "doSuggest";
public void encodeBegin(
FacesContext context,
UIComponent component) throws IOException
{
writeScriptResource(context,
"weblet://org.dojotoolkit.browserio/dojo.js");
writeScriptResource(context,
"weblet://net.java.dev.mabon/mabon.js");
writeScriptResource(context,
"weblet://com.apress.projsf.jdj/inputSuggest.js");
writeStyleResource(context,
"weblet://com.apress.projsf.jdj/inputSuggest.css");
}

精彩图集

赞助商链接