初学DWR不是很懂,页面上显示undefined

[img]http://dl.iteye.com/upload/attachment/531871/57463dbb-5454-3a2c-9819-d4bc1bcf1729.jpg[/img]
页面上显示的是undefined,主要是DWR没学过,还有setAttribute('id','info'+list[i]);appendChild(ele);innerHTML这些用法不是很清楚
到底是哪里出错了,照我的理解应该会显示出我需要的结果的啊,标题加内容
核心代码:
[code="java"]var request;
var minpage;
var maxpage;
var startindex;
var hasnext;

function doSearch(type){
var result=document.getElementById("result");
var pagingdiv=document.getElementById('paging');
result.innerHTML="";
pagingdiv.innerHTML="";

if(type!='paging'){
    var startindexinput=document.getElementById('startindex');
    startindexinput.value="1";
}

request={startindex:1,query:""};
DWRUtil.getValues(request);

searchService.getSearchResults(request,fillPage);

}

function fillPage(data){
var ID=data.id;
var URL=data.url;
var TITLE=data.title;
var CONTENT=data.content;
var resultdiv=document.getElementById('result');
var pagingdiv=document.getElementById('paging');

resultdiv.innerHTML="";
pagingdiv.innerHTML="";

if(ID.length==0){
    resultdiv.innerHTML="<span>sorry, we can't find what you want...</span>";
    return;
}

for(var i=0;i<ID.length;i++){
    var ele=document.createElement('div');
    //ele.setAttribute('id','info'+list[i]);
    ele.setAttribute('id','info');
    ele.innerHTML="<span>loading..</span>";
    resultdiv.appendChild(ele);
    var result=document.getElementById('info');
    //result.innerHTML="<font color=\"#0033CC\">" + data.title + "</font><br /><a href=\"" + data.url + "\">"
    result.innerHTML="<a href=\"" + URL[i] + "\">"
    +"<font color=\"#0033CC\">" + TITLE[i] + "</font></a><br /><font color=\"#008000\">" + CONTENT[i] + "</font><br /><br /><br />";
    //searchService.getSearchResultById(list[i],fillDetailResult);
    resultdiv.appendChild(result);
}[/code]

[code="java"]public SearchResults getSearchResults(SearchRequest request){
SearchResults results=new SearchResults();
Query query=makeQuery(request.getQuery());

    List <String>id=new ArrayList<String>();//id+title+url+content
    List<String>title=new ArrayList<String>();
    List <String>url=new ArrayList<String>();
    List <String>content=new ArrayList<String>();

    try{
        IndexSearcher searcher=new IndexSearcher(INDEX_STORE_PATH);
        Hits hits=searcher.search(query);
        int length=hits.length();
        int startindex=request.getStartindex();
        int endindex;
        if(startindex>length)
        {
            //不可能
        }
        else{
            endindex=startindex+9;
            if(endindex>=length){
                endindex=length;
            }
            for(int i=startindex;i<=endindex;i++){
                Document doc =hits.doc(i-1);
                String pageid=doc.get("pageid");
                String pagetitle=doc.get("title");
                String pageurl=doc.get("url");
                String pagecontent=choose(doc.get("content"),request.getQuery());
                id.add(pageid);
                title.add(pagetitle);
                url.add(pageurl);
                content.add(pagecontent);
            }
        }
        results.setId(id);
        results.setTitle(title);
        results.setUrl(url);
        results.setContent(content);
        int startpage;
        int endpage;
        if(startindex%100==0){
            startpage=(startindex/100-1)*10+1;
        }
        else{
            startpage=(startindex/100)*10+1;
        }
        int span;
        int hasnext;

        float temp=((float)(length-(startpage-1)*10))/10;
        if(temp>10)
        {
            span=9;
            hasnext=1;
        }
        else if(temp==10){
            span=9;
            hasnext=0;
        }
        else{
            hasnext=0;
            if((int)temp<temp){
                span=(int)temp;
            }
            else{
                span=(int)temp-1;
            }
        }
        endpage=startpage+span;

        results.setMinpage(startpage);
        results.setMaxpage(endpage);
        results.setHasnext(hasnext);
        results.setStartindex(startindex);
    }catch(Exception e){
        e.printStackTrace();
    }
    return results;
}[/code]
dwr

10个回答

应该是对的undefined是未定义,也就是根本就没有这个属性。
打印的是空的,才是有这个属性

回调函数进去了吗?alert过吗,这些值都拿到了吗?
[quote]
var ID=data.id;

var URL=data.url;

var TITLE=data.title;

var CONTENT=data.content;

[/quote]

DWR的返回值可以是String,List,Map这类的,你直接传回对象,可能会有问题

你把你那个对象换成Map的形式传回页面
然后用data['content']的方式取值

[quote]把title url content都改成Map? id当key?[/quote]

不是这个意思。

你的DWR方法:public SearchResults getSearchResults(SearchRequest request){}

不要返回SearchResults这个对象,返回一个Map的类型

map.put("ID",xxx);
map.put("URL",XXX);

页面获取值就是data['ID']

[quote]
private List id=new ArrayList();//id+title+url+content

private List title=new ArrayList();

private List url=new ArrayList();

private List content=new ArrayList();
[/quote]

你如果要让DWR能认出你的Java对象,那需要在DWR里面配置的。。
DWR直接能认出来的就是Java已经内置的几个对象String,Integer等,或者是这些对象的集合,List,Map

所以,这四个参数可以封装成Map>,或者是List>,这样的Javascript可以直接解析

[quote]
var ID=data.id;

var URL=data.url;

var TITLE=data.title;

var CONTENT=data.content;

[/quote]
你从data中并没有取int型的参数啊,取的这4个都是List

单个的值也可以封装成长度为一的List嘛

[code="java"]
public Map> getSearchResults(SearchRequest request){
List startindexList = new ArrayList();
startindexList.add(Integer.toString(startindex));
map.put("startIndex",startindexList);
}
这样子不行吗?
[/code]

你看下data的length呢
另外,因为map里放的是List,所以data['url']这样的如果有数据的话,也是个数组啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!