我的一个jsp页面 有几个input 还有个extjs树带checkbox的(js文件里的) 现在想用form submit提交input 和树的节点 改怎么提交啊 节点信息已经放到check里面了 如何把check提交到action (struts2) 给个完整点的答案 谢谢了
[code="java"]
var check = [];
Ext.onReady(function() {
Ext.BLANK_IMAGE_URL = "/dtjcsy/pages/js/ext/resources/images/default/s.gif";
var Tree= Ext.tree;
var loader = new Ext.tree.TreeLoader;
var tree = new Tree.TreePanel({
el:'tree-div',
autoScroll:true,
animate:true,
enableDD:true,
frame:false,
border:false,
useArrows:true,
checkModel:'cascade',
onlyLeafCheckable:false,
rootVisible:true,
bodyStyle:'background-color:#b4d5f5',
containerScroll: true,
listeners:{
checkchange:function(node,checked){
if(checked){
var id = node.attributes.id;
check.push(id);
}
}
},
loader: new Tree.TreeLoader({
dataUrl:'rightAction.action',
baseParams:{roleId:1},
baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI }
})
});
var root =new Tree.AsyncTreeNode({
text:"可用权限列表",
draggable:false,
id:'0'
});
tree.setRootNode(root);
tree.render();
root.expand();
});
[/code]
[code="java"]
/*!
Ext.onReady(function(){
var form = Ext.get('example-form');//你要赋值的form
var tree = new Ext.tree.TreePanel({
renderTo:'tree-div',
title: 'My Task List',
height: 300,
width: 400,
useArrows:true,
autoScroll:true,
animate:true,
enableDD:true,
containerScroll: true,
rootVisible: false,
frame: true,
root: {
nodeType: 'async'
},
// auto create TreeLoader
loader : new Ext.tree.TreeLoader({
dataUrl:'check-nodes.json',
requestMethod : 'GET'
}),
listeners: {
'checkchange': function(node, checked){
var id = node.attributes.id;
if(checked){
Ext.DomHelper.append('example-form' , {tag: 'input', name: 'id', type : 'hidden' , value: id});
}else{
var inputs = Ext.DomQuery.jsSelect('input[value=' + id + ']' , 'example-form');
for(var i = 0 , len = inputs.length ; i < len ; i++) {
form.dom.removeChild(inputs[i]);
}
}
}
},
buttons: [{
text: 'Get Completed Tasks',
handler: function(){
var msg = '', selNodes = tree.getChecked();
Ext.each(selNodes, function(node){
if(msg.length > 0){
msg += ', ';
}
msg += node.text;
});
Ext.Msg.show({
title: 'Completed Tasks',
msg: msg.length > 0 ? msg : 'None',
icon: Ext.Msg.INFO,
minWidth: 200,
buttons: Ext.Msg.OK
});
}
}]
});
tree.getRootNode().expand(true);
});
[/code]
这个是我把extjs提供的例子,check-tree.html做了一下改动写的,你看看,我测试过了可以的,页面上加了一个form。我不知道你check提供到服务器端使用什么参数名,所以这里都采用了name为id,你可以按需要更改。
[code="java"]
params:check ,
不行嗎?
action
直接简单点
request来取得params吧·
[/code]
form组件里面的input,通过submit直接提交是可以的,但tree里面的值需要你自己获取再提交。
在tree上增加监听:
[code="java"]
var check = [];
//...
listeners : {
checkchange : function(node , checked ) {
if (checked) {
var id = node.attributes.id;//也可以获取其他你需要的值
check.push(id);
}
}
}
//...
[/code]
这样你就可以获取到所有选中的值,然后再form的submit时,把这个值也作为参数一起提交到服务器端就可以了。
[code="java"]
myFormPanel.getForm().submit({
clientValidation: true,
url: 'updateConsignment.php',
params: {
newStatus: 'delivered',
check : check //你要提交的参数
},
success: function(form, action) {
Ext.Msg.alert('Success', action.result.msg);
}
});
[/code]
像这样,把之前的check值作为一个额外参数让form提交就好了。
[quote]
[code="java"]
url: 'updateConsignment.php',//这个是我FORM在的页面吗 还是什么?
newStatus: 'delivered',//这个是什么
[/code]
[/quote]
这个是我随便找的一个例子,演示一下。你说你的页面里有个form和tree嘛,那Tree组件获取你要的值,我前面说过了。那form,你肯定也是用组件了,Ext.form.FormPanel,上面就是个例子,url表示你要提交的form的地址,params里面设置你要提交的请求参数,名字你可以自己定的,我这里是一个例子而已。你可以看看Ext.form.BasicForm的API就知道了。
[quote]
我只用ext做了个树 别的全都不是ext的 form也不是
[/quote]
那也行啊,如果用普通的form表单,你直接用js在这个form下,把刚才获取的tree值,作为一个隐含的input增加进去就可以了,这样当你的form提交时,这些值也会被提交的啊。
[quote]
怎么把check放到input里
是写到js文件里面的吗 还是写到哪
[/quote]
这里只能用js啊!你可以把它放到点击tree的事件里面:
[code="java"]
//...
listeners : {
checkchange : function(node , checked ) {
var form = Ext.get('form-id);//这里使用form的ID
if (checked) {
var id = node.attributes.id;//也可以获取其他你需要的值
form.appendChild('');//加到form里面去
} else {//取消选择时,把form里面原来的input删除
var input = DomQuery.selectNode('input[value=' + id + ']',form.dom);
input && input.remove();
}
}
}
//...
[/code]
大致就是这个意思,代码我没有调试,你可以参考这个自己改改。
[quote]没有效果啊 [/quote]
我说了,我的代码只是表达这个意思,是否可以运行,还有结合你页面具体情况,基本意思就是这样了。你自己调试再改改就可以了。
没有“效果”,你要看看input是否添加到form里面去了,通过firebug可以查看的啊!我不知道你的页面结构,怎么能保证代码复制过去就可以了呢。自己要多动手,这样你才能提高啊!
[quote]
没有别的方法吧 extjs tree 里的变量 和form 一起提交吗? 这个我不会弄
[/quote]
我能想到的就这个方法了。你说不会弄,方法我已经告诉你了,把tree节点的值以input的方式动态加到form里面去,你是说js代码不会写吗?这个很基础的,那你要多多努力了。
你把你运行后的浏览器源代码发上来,我看看。