前天下午参照了一位网友的说法,为了显示查询后的结果采用了下面的代码
function searchDoc() {
var ds = new Ext.data.Store({
reader: new Ext.data.JsonReader({//读取json数据
root:'searchDocList', //
totalProperty:'totalSearch'
},
[
{name: 'name'},
{name: 'EName'},
{name: 'extType'},
{name: 'state'},
{name: 'docId'},
]
),
proxy : new Ext.data.HttpProxy({
url : path+'doc/searchDoc.action',
method: 'GET'
})
})
docGrid.reconfigure(ds,cm);
ds.baseParams['keyword'] = text_search_doc.getValue();//text_search_doc为一个
Ext.form.TextField
ds.load({params : {start : 1,limit :10}});
}
果然能够显示查询后的结果,但只有一页,我思先想后,结果发现分页还是要传递参数的,后来听说一个什么baseParams,能够传递分页参数,结果我就就在这个处理方法里面写了 ds.baseParams['keyword']结果还是不能分页,显示的仍然是查询前的分页效果,昨天早上起床后就开始忙活搜集资料,看了许多人的回复都是说一个baseParams的,由于受到了第一位网友写的代码的思维限制,导致我昨天一天都在忙活着在处理方法中的ds的相关参数,到了夜里九点多时,头都大了还是没有搞出来,今天早上不心甘起了大早,终于解决了问题:原来,我不应该在方法里面重写Store的内容,那样的话不管怎样还是查询的是一页,因为分页的那个东西是属于外边的Store的,大胆的去掉了searchDoc方法中所有的代码,想到了一个更简便但不知道是否有效的方法,只在处理方法中写了两行代码
docStore.baseParams['keyword'] = text_search_doc.getValue();//docStore为外边的Store------(1)
docStore.load({params : {start : 0,limit : 10}});
中间有点注意:就是如果直接在struts2中配置private String keyword那么是会有乱码的,解决方法是ServletActionContext.getRequest.setCharacter("utf-8")来设定字符集然后通过ServletActionContext.getRequest.getParameters("keyword")来获取参数。没想到这么快就出来结果,当时我就快哭了,太激动了,真是功夫不负有心人啊,赶紧记录下来了,为什么写这个baseParams呢,因为你每次分页必须要带上分页条件的,这样设置了最基本的传递参数,只要你搜索框中的值还存在,肯定是按那个条件来分页的
补充一下,后来又发现下面这两条语句可以替换上面的第一行代码,效果是一样的
docStore.baseParams.keyword= text_search_doc.getValue();//--------(2)
docStore.baseParams={keyword:text_search_doc.getValue()};//---------(3)
也就是说我们以后传递参数可以有这三种方式了,累死了,先休息会,我五点钟起的床