先写一个action里的方法:
[code="java"]
public String loadData() throws IOException {
if(plan != null && plan.getPlanId() != null){
plan = planManager.get(plan.getPlanId());
ActionContext ctx = ActionContext.getContext();
HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);
StringBuffer buff = new StringBuffer();
buff.append("[");
buff.append("{'").append("entityName").append("':'").append(plan.getPlanName()).append("',");
buff.append("'").append("owner").append("':'").append(plan.getOwner().getAccountName()).append("',");
buff.append("'").append("status").append("':'").append(plan.getState()).append("',");
buff.append("'").append("desc").append("':'").append(plan.getPlanDesc()).append("'},{success:true}]");
log.info(buff.toString());
response.getWriter().write(buff.toString());
response.getWriter().close();
}
return null;
}
[/code]
-------------这里可以去到数据,并且也都执行了----------------
下面是js:
[code="java"]
function viewPlanTask() {
var _record = grid.getSelectionModel().getSelected();
if (_record) {
myFormWin();
form1.form.load( {
url : 'loadData.html?plan.planId='+ _record.get('_id').substring(1),
waitMsg : '正在载入数据...',
failure : function(from, action) {
alert(from.result);
Ext.Msg.alert('编辑', '载入失败');
},
success : function() {
//Ext.Msg.alert('编辑', '载入成功!');
}
});
} else {
Ext.Msg.alert('查看任务','请选择要查看的数据项!');
}
}
var myFormWin = function() {
if (!viewFormWin) {
viewFormWin = new Ext.Window( {
layout : 'fit',
width : 850,
height : 500,
closeAction : 'hide',
plain : true,
title : '窗口',
items : form1,
modal:true,
reader : _jsonFormReader,
listeners :{
'hide':function(){
form1.getForm().reset();
}
}
});
}
viewFormWin.show('View');
};
var _jsonFormReader = new Ext.data.JsonReader(
[ {name : 'entityName',mapping : 'entityName'},
{name : 'owner',mapping : 'owner'},
{name : 'desc',mapping : 'desc'}]);
var form1 = new Ext.FormPanel({
monitorValid : true,
bodyborder:false,
labelAlign:'top',
height:350,
bodyStyle:'padding:10px 5px 0 100px',
frame:true,
title : '查看任务',
items : [ {
columnWidth:.5,
layout: 'form',
bodyborder:false,
items: [{
layout:'column',
bodyborder:false,
items:[{
columnWidth:.5,
layout: 'form',
bodyborder:false,
items: [{
fieldLabel: '计划名称',
id: 'planName',
name: 'planName',
anchor:'80%'
}]
},{
columnWidth:.5,
layout: 'form',
bodyborder:false,
items: [{
fieldLabel: '负责人',
name: 'owner',
id: 'owner',
anchor:'80%'
}]
}]
}]
},{
columnWidth:.5,
layout: 'form',
bodyborder:false,
items: [{
layout:'column',
bodyborder:false,
items:[{
columnWidth:.5,
layout: 'form',
bodyborder:false,
items: [{
fieldLabel: '计划描述',
name: 'planDesc',
id: 'planDesc',
anchor:'80%'
}]
}]
}]
}],
buttons : [{
text : '关闭',
handler : function() {
viewFormWin.hide();
}
}]
});
[/code]
总是提示载入失败,不走success,不晓得哪里有问题
上面的代码 排版不好 重发
[code="java"]form1 = new Ext.FormPanel( {
labelWidth : 75,
labelAlign:'center',
height:350,
bodyStyle:'padding:10px 5px 0 30px',
frame:true,
title : '查看任务',
width : 450,
waitMsgTarget : true,
renderTo:"form", //你可以把这个去掉
layout:'form',
items : [{
layout: 'column',
bodyborder:false,
items: [{
layout:'form',
columnWidth:.5,
bodyborder:false,
items:[{
fieldLabel: '计划名称',
xtype:'displayfield',
id: 'entityName',
name: 'entityName',
value:"xdsdsxx"
}]
},{
layout: 'form',
columnWidth:.5,
bodyborder:false,
items: [{
fieldLabel: '负责人',
xtype:'displayfield',
name: 'owner',
id: 'owner',
//anchor:'100%',
value:"xdsdsxx"
}]
}]
},new Ext.form.TextArea({
fieldLabel : '计划描述',
name : 'desc',
disabled : true,
width : 250,//改变这个改变宽度
growMin : 234
})
],
buttons : [{
text : '关闭',
handler : function() {
viewFormWin.hide();
}
}]
}); [/code]
先不管与后台交互问题 就ext的代码问题就太了多哎
你先 myFormWin(); 调用这个方法
然后这个在下面定义的 没定义呢 就访问呀
var myFormWin = function() { ...}
window里的这个也是
items : form1,
form1在下面定义的 晕了
不管这些 单单看form代码 拿出其中一段
{
columnWidth:.5,
layout: 'form',
bodyborder:false,
items: [{
fieldLabel: '计划名称', 都没指定控件的类型 就是xtype:"textfield" 单单运行form代码 都运行不出来呀 文本框不显示哦
id: 'planName',
name: 'planName',
anchor:'80%'
}]
先解决正常显示再说吧
还有后台返回的数据非json格式的
}
js代码如果这样写
[code="java"]
a();
var a = function (){
alert(1)
}[/code]
火狐会报a is not a function
如果你想只读 可以xtype:"displayfield"
代码贴上 看看
有可能宽度不够
<script type="text/javascript">
Ext.onReady(function(){
form1 = new Ext.FormPanel( {
labelWidth : 75,
labelAlign:'center',
height:350,
bodyStyle:'padding:10px 5px 0 30px',
frame:true,
title : '查看任务',
width : 450,
waitMsgTarget : true,
renderTo:"form",
layout:'form',
items : [{
layout: 'column',
bodyborder:false,
items: [{
layout:'form',
columnWidth:.5,
bodyborder:false,
items:[{
fieldLabel: '计划名称',
xtype:'displayfield',
id: 'entityName',
name: 'entityName',
value:"xdsdsxx"
}]
},{
layout: 'form',
columnWidth:.5,
bodyborder:false,
items: [{
fieldLabel: '负责人',
xtype:'displayfield',
name: 'owner',
id: 'owner',
//anchor:'100%',
value:"xdsdsxx"
}]
}]
},new Ext.form.TextArea({
fieldLabel : '计划描述',
name : 'desc',
disabled : true,
width : 250,//改变这个改变宽度
growMin : 234
})
],
buttons : [{
text : '关闭',
handler : function() {
viewFormWin.hide();
}
}]
});
});
<div id="form">
</div>
</body>
我的修改后代码 提供给你了 关键是你的labelAlign:'top',
我改成labelAlign:'center', 就好使了 form里的其他代码 我也稍微改了下