1、前台js代码(使用prototype链接ajax)

function displayItem(code)
 {
  var url = "ajax/findItems.action?code="+code;
  var myAjax = new Ajax.Request(
                  url,
                  {
                      method: 'get', // 使用GET方式发送HTTP请求
                      onComplete: callbackOp  // 指定请求成功完成时需要执行的方法
                  }
              );
 }
 function callbackOp(response)
 {
   var object=eval('('+response.responseText+')'); //得到服务器返回的值
       var leftContent = object.leftMembers;
        var leftSelect = document.getElementById("left");
        leftSelect.options.length = 0;
       for(i = 0;i<leftContent.length;i++){
           var per=leftContent[i].split("_");
           leftSelect[i] = new Option(per[1],per[0]);
           }
             }
 }

2、struts.xml配置文件中

<package name="ajax" namespace="" extends="json-default">
     <action name="*" class="" method="{1}">
         <result type="json"></result>
  </action>

</package>

3、action中代码(要导入struts2-json-plugin-2.1.8.1.jar包,我的Struts版本是2.1.8)

import org.apache.struts2.json.annotations.JSON;

public Class ajaxAction extends ActionSupport{

private PracticeService ps;

private List<String> leftMembers;

public String execute(){

leftMembers =  ps.findItem(code, 1);

return "success"

}

@JSON(name="leftMembers")
 public void setLeftMembers(List<String> leftMembers) {
  this.leftMembers = leftMembers;
 }

public List<String> getLeftMembers() {
  return leftMembers;
 }

public void setPs(PracticeService ps) {
  this.ps = ps;
 }

}

如果页面的js文件中的responseText里的内容出现html网页的内容可以将getMembers方法去掉试下看,本人就是这么干的

4、在service中有个方法将得到一个List<String>的串在这里我是只将要在web页面显示的东西拼起来的,如我在页面只要member的code和name属性里的值(member 是自己定义的一个model),那我中间便用"_"隔开,以便在js中取值

for(Member single : list){
   StringBuffer temp = new StringBuffer();
   temp.append(String.valueOf(single.getCode()));
   temp.append("_");
   temp.append(single.getName());
   members.add(temp.toString());

}

如有更好的方法,望指教!!