您的位置:首页 > Web前端 > JQuery

Jquery autocomplete在struts2中的使用及体会(json plugin)

2010-03-02 21:43 507 查看
struts2项目中需要在页面上使用jquery的autocomplete,在网上查到可以用struts2的json plugin,就此麻烦开始。先下载了json0.34,老是提示出错,找不到某某方法,一看说是版本问题,我用的是struts2.1.6,按json plugin的网站说的,0.34应该支持struts2.1.x的,却不能支持。只好下载0.33来用,还不错,这次没有闹腾,顺利调通。

接下来的问题是jquery的autocomplete接收的字符串不是标准的json格式,而是string|string|string/n(换行用于区分每组值)。一开始想修改autocomplete的脚本,但看上去很不方便,因为现在的autocomplete是支持多个值的,例如取user值,可以附带user fullname,以及email等其他值。组合的格式是,userId|fullname|email.../n,如果想要再附加多个值都可以。而json格式是key-value格式的,这个key是不一定的,对于autocomplete来说,就要和具体逻辑绑定在一起。这样修改是不划算的。

json plugin本身显得比较山寨,文档上显示plugin停止更新了,由struts2-json-plugin.jar在struts2.1.7包含发布,但并没有对新的jar如何使用没有提供文档,不知道是不是和原来的一样。另外,从json plugin生成json的方式看,感觉很耗资源,要产生一个有实用价值的的json字符串,需要有对应名字的set方法,外带有list的参数,而list中要包含map的key-value对象,一个获取名字的功能,一次取100条记录的话,资源消耗十分厉害。

此时,考虑到ajax的用法应当是朝着开放而自由的方向,而并非要受到各种限制。例如,日后如果发起xhr请求之后,需要服务器返回json,xml或者自己定制格式的结果的话,目前的方案是无法满足要求的。所以决定再去struts2的网站上查一查,看看有无其他支持ajax的方法,一查果然有。具体内容如下:

package actions;

import java.io.InputStream;

import java.io.StringBufferInputStream;

import com.opensymphony.xwork2.ActionSupport;

public class TextResult extends ActionSupport {

private InputStream inputStream;

public InputStream getInputStream() {

return inputStream;

}

public String execute() throws Exception {

inputStream = new StringBufferInputStream("Hello World! This is a text string response from a Struts 2 Action.");

此处的StringBufferInputStream从jdk1.1开始就淘汰了,用ByteArrayInputStream代替,将字符串转换为

byte[]之后new ByteArrayInputStream() 就可以了。在此处可以自己任意组合要返回的字符串,xml,json或者是定制格式。

return SUCCESS;

}

}

<action name="text-result" class="actions.TextResult">
<result type="stream">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>

用上面的代码,很顺利的调通代码,也无需修改autocomplete的脚本。这样,也为日后更大范围在项目中使用ajax找到一个稳定的途径。
通过上面的经历,明显感觉到那些所谓的插件,例如对dojo,jquery等知名ajax的包装,很明显是画蛇添足,没啥前途的。这方面还是
直接使用dojo.js或是jquery.js来的好,想用任何流行的widget都可以,又何必去等这个所谓的插件呢。这个和.net的ajax社区开发的ajax
lib方向上有点像,过度包装后,失去了其灵活性,修改和维护的代价过大,不值得。也令人不放心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: