起初放到单独的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()
});
});
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, {});
附 .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>