jquery easyui datagrid查询时,怎么才能传java对象参数?
jquery easyui datagrid加载查询时,怎么才能传java对象参数?或者给解释下datagrid 加载时候如何修改才能传 对象参数?解决问题者100分追加。
目的是达到就像提交表单那样,在action中直接用对象就能获取到参数值,如下我要传opt对象的id属性:
jsp中:
<form name="">
<s:hidden name="opt.id" id="opt.id"></s:hidden>
......
</form>
var params = $('#listTable').datagrid('options').queryParams;
params["opt.id"]=$("opt.id").val();
$('#listTable').datagrid('load');
datagrid easyui jQuery Java 对象 --------------------编程问答-------------------- 不是有个$('#mygrid').datagrid('reload', { myquery: value });吗? --------------------编程问答-------------------- 主要是想,传对象参数,不是直接 单个属性字段,总之是 在action中要用所属对象的get方法获取到,如:传id属性时,我action中 在opt对象中要看到他的id值存在。 --------------------编程问答-------------------- 可以传一个json,不用一个个传 --------------------编程问答--------------------
java action 中接参数:
class TestAction {
private OptBean opt;
public String execute(){
//在此要获取opt的id值
//如此能获取到----
String id = request.getParameter("opt.id")
//如此获取不到
id = opt.getId();
return null;
}
set...
get...
}
class OptBean {
private String id;
set...
get...
}
无论 怎么传,action中能用opt对象获取到就行啊?关键是现在如下情况:
//如此能获取到----
String id = request.getParameter("opt.id")
//如此获取不到
id = opt.getId();
--------------------编程问答-------------------- 那就不用穿了,action定义一个和页面的name值一样的属性,就能自动获取了。 --------------------编程问答--------------------
我现在问题是,对系统前台代码进行重构,action想不变动 现有接参 方式,保持原有对象传值的方式,如果是只是达到接到参数值的目的,我现在就不用再纠结了,因为现在已经能成功传值了;
现在的问题是我要 传值、接值的方式是 对象传值 方式,不是实现 怎么成功传值; --------------------编程问答-------------------- 关键的问题,你如何去构筑这个对象,除非你前台引入java代码,传对象进去。 --------------------编程问答-------------------- $('#listTable').datagrid('load',params); --------------------编程问答--------------------
如果是 form 表单 submit提交,这个opt.id属性是可以传到action中的,即action中opt对象是有值的。
<form name="">
<s:hidden name="opt.id" id="opt.id"></s:hidden>
......
</form>
现在同样想实现,action中opt对象也能有值。
--------------------编程问答-------------------- 你可以封装一个公用类,存放grid自带的那些个属性,入page,rows等参数,至于查询条件貌似不好共用 --------------------编程问答-------------------- 那你这个opt,不还是后台定义的了。 --------------------编程问答-------------------- 封装一个对象可以吗?如果这个可以,其它查询参数也应该可以啊,?因为他们的传值方式 是一样的啊?看源码是这样的,请求的时候都一样的啊!
--------------------编程问答-------------------- 现在问题就是要解决 为什么 opt对象没有接到值?
var _47a = $.extend({}, opts.queryParams);
if (opts.pagination) {
$.extend(_47a, {
page: opts.pageNumber,
rows: opts.pageSize
});
}
if (opts.sortName) {
$.extend(_47a, {
sort: opts.sortName,
order: opts.sortOrder
});
}
$.ajax({
type: opts.method,
url: opts.url,
data: _47a,
..................
而String id = request.getParameter("opt.id")接到了值,可见它是 只 当成字符串了! --------------------编程问答-------------------- 你后台要定义一个opt对象,取的时候直接getOpt().getId()之类的就行了。 --------------------编程问答-------------------- 问题是 现在这样不能获取到?这就是要解决的问题点! --------------------编程问答-------------------- 看你如何定义的opt,已经如何使用的opt --------------------编程问答--------------------
看一楼嘛!我上面简单写了的啊!
无非是 action中 opt对象 set get,
和 opt 对象class内的 id 属性 set get --------------------编程问答-------------------- 难道获取不到隐藏域的值,显示的写一个属性看看能获取不 --------------------编程问答-------------------- 直接写死个定值 都不行.不知道为什么。。 --------------------编程问答-------------------- form里有method属性吗?加个method="post" --------------------编程问答-------------------- 又不是form表单提交,给form写method 没有什么作用吧! --------------------编程问答-------------------- 问题解决啦,分享下!
最终走查代码发现了问题,action的 执行方法名为public String getopt(){},而属性定义为OptBean opt;其相对应的get 方法为getOpt,因此action 就有了两个 同名的getOpt()\getopt()方法,唯一的不同就是大小写不同,所以编译时候也不会标红,照样编译通过.但是在前台jsp进行传值后,没有首先找到相应的get方法是而是执行getopt方法,所以造成没有接到值的现象.
因此改掉方法名或是改掉对象声明 对象名,则就解决问题.
经验分享:
由于是对系统代码进行重构,是别人原有代码,代码不熟悉,也不容易发现定位问题,也没有明显的异常出现,导致问题定位出现了一定的困难,因此在开发过程中一定要注意避免类似问题,在action控制层避免出现get set业务方法出现,这样就避免了类似的问题出现.
另外,如果有哪位童鞋,有插件或方法在ide中使出现类型同名方法的时候标红或编译不通过,请跟帖分享下.从编码的时候就警告开发者出现同名方法; --------------------编程问答-------------------- var param={"xxx.xxx":$("#xxx").val()};
$('#listTable').datagrid('options').queryParams=param;
$('#listTable').datagrid('reload'); --------------------编程问答-------------------- 对象在action里面需要get set方法
补充:Java , Web 开发