起初放到单独的student.js里,运行正常;可把组件放到tab里就触发不了struts了,因此也取不到数了。(1)在web里直接运行student.jsp正常(直接调用student.js)(2)student.js的组件拷到tab页SbbmglPanel.js里就只出来界面没数据了,设断点发现没到相应的action。哪位大侠指正一下。<!--************student.jsp-->
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" debug="true">
<head>
<base href="<%=basePath%>" />
<link rel="shortcut icon" href="<%=basePath%>images/favicon.ico"
type="image/x-icon"></link>
<title>Student</title>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3" />
<meta http-equiv="description" content="This is my page" />
<link rel="stylesheet" type="text/css"
href="<%=basePath%>/ext2/css/ext-all.css" /> <!-- ext -->
<script type="text/javascript" src="<%=basePath%>/ext2/js/ext-base.js"></script>
<script type="text/javascript"
src="<%=basePath%>/ext2/js/ext-all-debug.js"></script>
<script type="text/javascript" src="<%=basePath%>/js/student.js"></script> </head>
<body> </body>
</html><!--***********************student.js-->
/**
 * 
 * @email [email protected]
 * @author linlin yu
 * @version 1.0
 */var StudentFormPanel = function() {
this.idTextField = {
// xtype : 'hidden',
xtype : 'textfield',
fieldLabel : "id",
readOnly : true,
name : "id"
};
this.nameTextField = {
xtype : 'textfield',
fieldLabel : "name",
allowBlank : false,
name : "name"
};
this.ageTextField = {
xtype : 'numberfield',
fieldLabel : "age",
allowBlank : false,
name : "age"
}; StudentFormPanel.superclass.constructor.call(this, {
bodyStyle : 'padding:5px 5px 0',
frame : true,
reader : new Ext.data.JsonReader( {
root : 'list',
successProperty : 'success',
totalProperty : 'totalSize',
id : 'id'
}, ['id', 'name', 'age']),
items : [this.idTextField, this.nameTextField, this.ageTextField]
});
}
Ext.extend(StudentFormPanel, Ext.form.FormPanel, {
loadData : function(id) {
var url = 'student/doGetStudent.action?id=' + id;
this.getForm().load( {
url : url,
waitMsg : 'Loading',
failure : function(form, action) {
var json = action.response.responseText;
var o = eval("(" + json + ")");
Ext.MessageBox.show( {
title : 'Error',
msg : o.message,
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.ERROR
});
}
});
}
});var StudentWindow = function() {
var _win = this;
this.formPanel = new StudentFormPanel();
var _form = this.formPanel.getForm();
StudentWindow.superclass.constructor.call(this, {
title : 'Student',
width : 520,
height : 300,
resizable : true,
plain : false,
border : false,
modal : true,
autoScroll : true,
layout : 'fit',
closeAction : 'hide',
items : this.formPanel,
buttons : [ {
text : 'save',
handler : function() { _form.errorReader = new Ext.data.JsonReader( {
successProperty : 'success',
root : 'list',
id : 'id'
}, ['id', 'name', 'age']); if (_form.isValid()) {
_form.submit( {
waitMsg : 'wait...',
url : 'student/doSave.action',
failure : function(form, action) {
var json = action.response.responseText;
var o = eval("(" + json + ")");
Ext.MessageBox.show( {
title : 'Error',
msg : o.message,
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.ERROR
});
},
success : function(form1, action) {
var data = action.result.errors[0];
if (_win.record) {
_win.record.data = data;
_win.record.reject();
_win.hide();
} else {
_win.record = new Ext.data.Record(data)
}
_form.loadRecord(_win.record);
}
});
}
}
}, {
text : 'close',
handler : function() {
_win.hide();
},
tooltip : 'Close the window'
}]
});
}
Ext.extend(StudentWindow, Ext.Window, {
loadData : function(id) {
this.formPanel.loadData(id);
}
});var StudentGridPanel = function() {
var stuWindow = new StudentWindow();
var _grid = this;
var recordType = Ext.data.Record.create([ {
name : 'id',
type : 'float',
mapping : 'id'
}, {
name : 'name',
type : 'string',
mapping : 'name'
}, {
name : 'age',
type : 'float',
mapping : 'age'
}]);
this.store = new Ext.data.Store( {
proxy : new Ext.data.HttpProxy( {
url : 'student/doGetStudentList.action'
}), // set up the JsonReader
reader : new Ext.data.JsonReader( {
root : 'list',
totalProperty : 'totalSize',
id : 'id'
}, recordType)
});
this.store.load();
var sm = new Ext.grid.CheckboxSelectionModel( {
singleSelect : false
});
this.columns = [new Ext.grid.RowNumberer(), {
id : 'id',
header : "id",
width : 160,
sortable : true,
dataIndex : 'id'
}, {
header : "name",
width : 75,
sortable : true,
dataIndex : 'name'
}, {
header : "age",
width : 75,
sortable : true,
dataIndex : 'age'
}, sm]; var deleteFormDiv = Ext.DomHelper.insertHtml('afterEnd', document.body,
'<div id="' + Ext.id() + '" style="visibility: hidden;"> </div>'); var deleteForm = new Ext.form.FormPanel( {
items : {}
}); deleteForm.render(deleteFormDiv);
deleteForm.getForm().errorReader = new Ext.data.JsonReader( {
successProperty : 'success'
}, ['id', 'name', 'age']);
StudentGridPanel.superclass.constructor
.call(
this,
{
layout : 'fit',
sm : sm,
viewConfig : {
emptyText : "No record to display"
},
bbar : new Ext.PagingToolbar( {
pageSize : 20,
store : this.store,
displayInfo : true,
displayMsg : 'Displaying record {0} - {1} of {2}',
emptyMsg : "No Outstanding PD Case to display"
}),
tbar : [
{
text : 'add',
handler : function() {
var data = {};
var record = new Ext.data.Record(data);
_grid.store.insert(0, record);
stuWindow.record = record;
stuWindow.formPanel.getForm().reset();
stuWindow.show();
}
},
'-',
{
text : 'delete',
handler : function() {
var records = _grid.getSelections();
if (records) {
Ext.MessageBox
.confirm(
'Confirm',
'Are you sure you want to do that?',
function(btn) {
if (btn == 'yes') {
var ids = "";
for (var i = 0; i < records.length; i++) {
var record = records[i]
if (record.data.id) {
ids += record.data.id
+ ',';
} else {
_grid.store
.remove(record);
}
}
deleteForm
.getForm()
.submit( {
waitMsg : 'wait...',
url : 'student/doDelete.action?ids='
+ ids,
failure : function(
form,
action) {
var json = action.response.responseText;
var o = eval("("
+ json
+ ")");
Ext.MessageBox
.show( {
title : 'Error',
msg : o.message,
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.ERROR
});
},
success : function(
form1,
action) {
_grid.store
.load();
}
});
}
});
}
}
}, '-', {
text : 'edit',
handler : function() {
var record = _grid.getSelected();
if (record != null) {
stuWindow.show();
var record = _grid.getSelected();
stuWindow.record = record;
stuWindow.loadData(record.data.id);
}
}
}]
});
}Ext.extend(StudentGridPanel, Ext.grid.GridPanel, {
getSelected : function() {
var record = this.getSelectionModel().getSelected();
if (record == null) {
Ext.MessageBox.show( {
title : 'Infomation',
msg : "please select record",
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.INFO
});
} else {
return record;
}
},
getSelections : function() {
var records = this.getSelectionModel().getSelections();
if (records.length < 1) {
Ext.MessageBox.show( {
title : 'Infomation',
msg : "please select record",
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.INFO
});
} else {
return records
}
}
});Ext.onReady(function() {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'under'; new Ext.Viewport( {
layout : 'fit',
items : new StudentGridPanel()
});
});

解决方案 »

  1.   

    <!--***************SbbmglPanel.js -->
    Morik.Office.SbbmglPanel = function(config) {
    Morik.Office.SbbmglPanel.superclass.constructor.call(this, config);
    var StudentFormPanel = function() {
    this.idTextField = {
    // xtype : 'hidden',
    xtype : 'textfield',
    fieldLabel : "id",
    readOnly : true,
    name : "id"
    };
    this.nameTextField = {
    xtype : 'textfield',
    fieldLabel : "name",
    allowBlank : false,
    name : "name"
    };
    this.ageTextField = {
    xtype : 'numberfield',
    fieldLabel : "age",
    allowBlank : false,
    name : "age"
    }; StudentFormPanel.superclass.constructor.call(this, {
    bodyStyle : 'padding:5px 5px 0',
    frame : true,
    reader : new Ext.data.JsonReader( {
    root : 'list',
    successProperty : 'success',
    totalProperty : 'totalSize',
    id : 'id'
    }, ['id', 'name', 'age']),
    items : [this.idTextField, this.nameTextField, this.ageTextField]
    });
    }
    Ext.extend(StudentFormPanel, Ext.form.FormPanel, {
    loadData : function(id) {
    var url = 'student/doGetStudent.action?id=' + id;
    this.getForm().load( {
    url : url,
    waitMsg : 'Loading',
    failure : function(form, action) {
    var json = action.response.responseText;
    var o = eval("(" + json + ")");
    Ext.MessageBox.show( {
    title : 'Error',
    msg : o.message,
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.ERROR
    });
    }
    });
    }
    });var StudentWindow = function() {
    var _win = this;
    this.formPanel = new StudentFormPanel();
    var _form = this.formPanel.getForm();
    StudentWindow.superclass.constructor.call(this, {
    title : 'Student',
    width : 520,
    height : 300,
    resizable : true,
    plain : false,
    border : false,
    modal : true,
    autoScroll : true,
    layout : 'fit',
    closeAction : 'hide',
    items : this.formPanel,
    buttons : [ {
    text : 'save',
    handler : function() { _form.errorReader = new Ext.data.JsonReader( {
    successProperty : 'success',
    root : 'list',
    id : 'id'
    }, ['id', 'name', 'age']); if (_form.isValid()) {
    _form.submit( {
    waitMsg : 'wait...',
    url : 'student/doSave.action',
    failure : function(form, action) {
    var json = action.response.responseText;
    var o = eval("(" + json + ")");
    Ext.MessageBox.show( {
    title : 'Error',
    msg : o.message,
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.ERROR
    });
    },
    success : function(form1, action) {
    var data = action.result.errors[0];
    if (_win.record) {
    _win.record.data = data;
    _win.record.reject();
    _win.hide();
    } else {
    _win.record = new Ext.data.Record(data)
    }
    _form.loadRecord(_win.record);
    }
    });
    }
    }
    }, {
    text : 'close',
    handler : function() {
    _win.hide();
    },
    tooltip : 'Close the window'
    }]
    });
    }
    Ext.extend(StudentWindow, Ext.Window, {
    loadData : function(id) {
    this.formPanel.loadData(id);
    }
    });var StudentGridPanel = function() {
    var stuWindow = new StudentWindow();
    var _grid = this;
    var recordType = Ext.data.Record.create([ {
    name : 'id',
    type : 'float',
    mapping : 'id'
    }, {
    name : 'name',
    type : 'string',
    mapping : 'name'
    }, {
    name : 'age',
    type : 'float',
    mapping : 'age'
    }]);
    this.store = new Ext.data.Store( {
    proxy : new Ext.data.HttpProxy( {
    url : 'student/doGetStudentList.action'
    }), // set up the JsonReader
    reader : new Ext.data.JsonReader( {
    root : 'list',
    totalProperty : 'totalSize',
    id : 'id'
    }, recordType)
    });
    this.store.load();
    var sm = new Ext.grid.CheckboxSelectionModel( {
    singleSelect : false
    });
    this.columns = [new Ext.grid.RowNumberer(), {
    id : 'id',
    header : "id",
    width : 160,
    sortable : true,
    dataIndex : 'id'
    }, {
    header : "name",
    width : 75,
    sortable : true,
    dataIndex : 'name'
    }, {
    header : "age",
    width : 75,
    sortable : true,
    dataIndex : 'age'
    }, sm]; var deleteFormDiv = Ext.DomHelper.insertHtml('afterEnd', document.body,
    '<div id="' + Ext.id() + '" style="visibility: hidden;"> </div>'); var deleteForm = new Ext.form.FormPanel( {
    items : {}
    }); deleteForm.render(deleteFormDiv);
    deleteForm.getForm().errorReader = new Ext.data.JsonReader( {
    successProperty : 'success'
    }, ['id', 'name', 'age']);
    StudentGridPanel.superclass.constructor
    .call(
    this,
    {
    layout : 'fit',
    sm : sm,
    viewConfig : {
    emptyText : "No record to display"
    },
    bbar : new Ext.PagingToolbar( {
    pageSize : 20,
    store : this.store,
    displayInfo : true,
    displayMsg : 'Displaying record {0} - {1} of {2}',
    emptyMsg : "No Outstanding PD Case to display"
    }),
    tbar : [
    {
    text : 'add',
    handler : function() {
    var data = {};
    var record = new Ext.data.Record(data);
    _grid.store.insert(0, record);
    stuWindow.record = record;
    stuWindow.formPanel.getForm().reset();
    stuWindow.show();
    }
    },
    '-',
    {
    text : 'delete',
    handler : function() {
    var records = _grid.getSelections();
    if (records) {
    Ext.MessageBox
    .confirm(
    'Confirm',
    'Are you sure you want to do that?',
    function(btn) {
    if (btn == 'yes') {
    var ids = "";
    for (var i = 0; i < records.length; i++) {
    var record = records[i]
    if (record.data.id) {
    ids += record.data.id
    + ',';
    } else {
    _grid.store
    .remove(record);
    }
    }
    deleteForm
    .getForm()
    .submit( {
    waitMsg : 'wait...',
    url : 'student/doDelete.action?ids='
    + ids,
    failure : function(
    form,
    action) {
    var json = action.response.responseText;
    var o = eval("("
    + json
    + ")");
    Ext.MessageBox
    .show( {
    title : 'Error',
    msg : o.message,
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.ERROR
    });
    },
    success : function(
    form1,
    action) {
    _grid.store
    .load();
    }
    });
    }
    });
    }
    }
    }, '-', {
    text : 'edit',
    handler : function() {
    var record = _grid.getSelected();
    if (record != null) {
    stuWindow.show();
    var record = _grid.getSelected();
    stuWindow.record = record;
    stuWindow.loadData(record.data.id);
    }
    }
    }]
    });
    }Ext.extend(StudentGridPanel, Ext.grid.GridPanel, {
    getSelected : function() {
    var record = this.getSelectionModel().getSelected();
    if (record == null) {
    Ext.MessageBox.show( {
    title : 'Infomation',
    msg : "please select record",
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.INFO
    });
    } else {
    return record;
    }
    },
    getSelections : function() {
    var records = this.getSelectionModel().getSelections();
    if (records.length < 1) {
    Ext.MessageBox.show( {
    title : 'Infomation',
    msg : "please select record",
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.INFO
    });
    } else {
    return records
    }
    }
    });
    // var gridsbwh = new Ext.grid.StudentGridPanel( );//此句创建实例组件运行出来界面但未见触发struts
    this.add(new StudentGridPanel());
    }
    Ext.extend(Morik.Office.SbbmglPanel, Ext.Panel, {});
      

  2.   


    附 .xml
    <!--web.xml  -->
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>jsp</display-name> <servlet>
    <servlet-name>InitServlet</servlet-name>
    <servlet-class>com.sbwh.servlet.InitServlet</servlet-class>
    <init-param>
    <param-name>drv</param-name>
    <param-value>org.gjt.mm.mysql.Driver</param-value>
    </init-param>
    <init-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/sbwh</param-value>
    </init-param>
    <init-param>
    <param-name>usr</param-name>
    <param-value>root</param-value>
    </init-param>
    <init-param>
    <param-name>pwd</param-name>
    <param-value>rootroot</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet> <servlet>
    <servlet-name>validationcodeServlet</servlet-name>
    <servlet-class>com.morik.util.ValidationCodeServlet</servlet-class>
    </servlet>
    <servlet>
    <servlet-name>sbpartServlet</servlet-name>
    <servlet-class>com.sbwh.servlet.CompanyServlet</servlet-class>
    </servlet>
    <servlet>
    <servlet-name>CompanyServlet</servlet-name>
    <servlet-class>com.sbwh.servlet.SbpartServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>validationcodeServlet</servlet-name>
    <url-pattern>/IMG.myaction</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>sbpartServlet</servlet-name>
    <url-pattern>/sbpart.myaction</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>CompanyServlet</servlet-name>
    <url-pattern>/Company.myaction</url-pattern>
    </servlet-mapping>
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
    org.apache.struts2.dispatcher.FilterDispatcher
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping><!-- <filter>
    <filter-name>encodingfilter</filter-name>
    <filter-class>com.morik.util.EncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>encodingfilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    --> <session-config>
    <session-timeout>120</session-timeout>
    </session-config> <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    </web-app>
    <!-- struts.xml-->
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
    <include file="student.xml" />

    <constant name="struts.enable.DynamicMethodInvocation"
    value="false" />
    <constant name="struts.devMode" value="true" /> <!-- Add packages here --></struts><!--student.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="student" namespace="/student"
    extends="struts-default"> <action name="do*" method="{1}"
    class="com.jsonext.stu.web.action.StudentAction">
    </action>
    </package>
    </struts>