列表9:支持bean的value属性
package com.apress.projsf.jdj.application;
import java.util.ArrayList;
import java.util.List;
/**
*BackingBean是一个inputSuggest.jspx文档的支持bean。
*/
public class BackingBean{
public void setValue(Object value) { _value = value; }
public Object getValue() { return _value; }
列表10.支持bean的doSuggest()方法
public String[] doSuggest(String initialValue) {
Listsuggestions = new ArrayList ();
for (int i=0; i _MASTER_LIST.length; i++) {
if (_MASTER_LIST[i].startsWith(initialValue))
suggestions.add(_MASTER_LIST[i]);
}
return suggestions.toArray(new String[0]);
}
private Object _value;
static private final String[] _MASTER_LIST = new String[]
{
"Pro JSF and Ajax",
"Pro Ajax",
"Pro JSP 2",
"Pro Jakarta",
"Pro J2EE 1.4"
};
}
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
一个JavaScript工具函数。我们可以使用这种Mabon协议来发送目标URL和需要的任何参数,然后异步地从托管bean中接收数据。
(七)Mabon和JSON
正如你所知,XMLHttpRequest提供了两种响应类型—responseText和responseXML—它们可以用于取回数据。你可能会问:我何时该使用哪一种响应类型?其实,这个问题的答案依赖于是否由你自己控制响应的语法。
responseXML类型返回一个完整的DOM对象(它提供多种方式来遍历这棵DOM树),从而允许你查找需要的信息并把所作变化应用到当前文档中。当你的组件有可能影响到周围的元素而且你不能控制响应时(例如,当你与一个Web服务进行通讯时),这是相当有用的。
对于本例中的输入建议组件,你的确要控制响应并且你只想从你的组件中取回数据,而不是修改整个页面的DOM结构。responseText类型返回普通的文本,这允许你利用JSON语法用于响应。为了在组件中利用AJAX技术,JSON是一种极其有用的数据交换格式,因为它可以轻易地使用eval()函数进行分析。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)eval()函数仅使用一个参数(一个JavaScript代码字符串),并一次性分析和执行这个字符串而不是分析处理每一部分。这种方法要比任何其它类型的分析(例如XML DOM分析方法)快得多。
这正是为什么Mabon实现JSON的原因—你能够控制响应,而且JSON具有语法简单和分析速度快的特点。
(八)encodeEnd()方法
真正的工作是在encodeEnd()方法中完成的,见列表7。在encodeEnd()方法中,我们从HtmlInputSuggest组件得到属性的Map。这个组件的属性之一是doSuggest属性。通过这个属性,我们能够得到MethodBinding(如果有的话),并且从这个MethodBinding对象,我们能够得到实际的由Web开发者所定义的MethodBinding表达式(例如,#{backingBean.doSuggest})。然后,我们从表达式中修整#{}并且用类似mabon:/协议的语法来连接字符串的余下部分。最后,MabonViewHandler将识别这个字符串并返回一个资源URL—它将被写向客户端(例如,/context-root/mabon-servlet-mapping/backingBean.doSuggest)。
三、使用输入建议组件
创建一套AJAX方案并不是一项简单的任务,尽管有若干使得这类工作更为容易些的AJAX工具包可用(例如Dojo Toolkit,www.dojotoolkit.org)。相比之下,JSF提供的是一种更为简单的编程模型和一种为大量开发者所熟悉的工具:JSP和Java。为了完整地结束本文中所提供的Ajax解决方案,让我们分析一下你如何在一个JSF应用程序中使用这个输入建议组件,由列表8所示。
这个页面包含一个HtmlInputSuggest组件(
value属性仅是一个普通的JavaBean属性。但是,显示于列表10中的doSuggest()方法却值得引起你的注意。这个方法使用由用户输入的初始值,该值是从doChange()函数(见列表3)中经由Mabon传递给它的。然后,doSuggest()方法根据用户在客户端输入的初始值返回一个经过过滤的数组。值得注意的是,返回的值遵循支持的JSON语法。
这个HtmlInputSuggest组件的最后结果显示于图2中。
图2.在一个浏览器中生成HtmlInputSuggest组件
四、结论
从本文中,我们希望你已经理解了如何使用Mabon来实现你的JSF组件以支持基于Ajax技术的数据回取,以及怎样通过利用Weblets工程把你的JSF组件需要的外部资源打包到与你的Java类相同的文档中。
最后,既然你已经知道怎样利用JSF和AJAX技术创建可重用的丰富互联网应用程序,那么我们非常希望你能够利用你在本系列文章中所学的技术来创建自己的定制组件以构建丰富互联网应用程序(RIA)。