我刚学ext-gwt,用ext-gwt编写了一个用户管理的界面。界面需要实现用户信息的分页显示和信息的各种编辑管理功能。server端有两个java程序分别执行这两个功能向数据库要数据的功能。数据库是用的sqlserver,目前程序在MyEclipse调试都通过了,在MyEclipse的容器里试验界面用户信息分页显示和用户信息的各种编辑功能按钮都正常。导出war包发布在Tomcat时界面能显示数据库中的用户信息,分页功能正常,但点击编辑用户信息的各个按钮时界面直接显示“删除失败”、“修改失败”。
请大家帮我想想是什么问题吧,我苦恼了好久了。
点击按钮后前台获得的数据是对的,我试验过了。
问题补充:程序里有判断,是在onfailure()时弹出失败框。前台组sql语句没有问题,在界面上打印出来看了。在服务器端Java程序里加上system.out.printfln,但是Tomcat日志里也没有打印出来,所以不知道在哪一步跳到onfailure()了。
问题补充:我把程序传上来大家帮我看看,这是服务器端删除、修改、添加按钮的程序,
package com.TESTRPC.demo.server;
import com.TESTRPC.demo.client.AddService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.*;
public class AddServiceImpl extends RemoteServiceServlet implements AddService {
private static final long serialVersionUID = 1L;
public Integer add(String a,String b,int c,int d){
int fields=0;
try {
int result=0;
System.out.printf("#########");
String qstr = "SELECT * FROM Personmanage WHERE UserName='"+b+"'" ;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://11.38.45.156:1433;databaseName=testdb";
Connection conn = (Connection) DriverManager.getConnection(url,"sa","1111");
System.out.printf("&&&&&&&");
String cmd = a;
Statement stmt = (Statement) conn.createStatement();
ResultSet rs = null;
if(c == 1)
{
qstr = "SELECT * FROM Personmanage WHERE UserName='"+b+"' and SequenceID !="+d ;
rs = stmt.executeQuery(qstr);
if(rs.next())
{
fields = 2;//用户名已经存在
if(stmt != null) stmt.close();
if(conn != null) conn.close();
if(rs != null) rs.close();
}
else
{
result = stmt.executeUpdate(cmd);
if (result > 0)
{
fields = 1;
}
else
{
fields = 0;//用户名中不能包含单引号
}
if(stmt != null) stmt.close();
if(conn != null) conn.close();
if(rs != null) rs.close();
}
}
if(c == 2)
{
rs = stmt.executeQuery(qstr);
if(rs.next())
{
fields = 2;//用户名已经存在
if(stmt != null) stmt.close();
if(conn != null) conn.close();
if(rs != null) rs.close();
}
else
{
result = stmt.executeUpdate(cmd);
if (result > 0)
{
fields = 1;
}
else
{
fields = 0;//用户名中不能包含单引号
}
if(stmt != null) stmt.close();
if(conn != null) conn.close();
if(rs != null) rs.close();
}
}
else if(c == 3)
{
result = stmt.executeUpdate(cmd);
if(result > 0)
{
fields = 1;
}
if(stmt != null) stmt.close();
if(conn != null) conn.close();
if(rs != null) rs.close();
}
}catch (Exception e) {
System.out.printf("AA");
e.printStackTrace();
}
return fields;
}
}
下面是前台java程序
package com.TESTRPC.demo.client;
import java.util.List;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
//import com.google.gwt.i18n.client.DateTimeFormat;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
//import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.google.gwt.user.client.rpc.AsyncCallback;
//import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.RootPanel;
//import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import java.util.ArrayList;
import java.util.Map;
import java.lang.String;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.RootPanel;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import java.util.ArrayList;
import java.util.Map;
import com.extjs.gxt.ui.client.widget.Info;
//import com.extjs.gxt.samples.resources.client.Resources;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.binding.FormBinding;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.Record;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.event.ButtonEvent;
public class RPCdemo implements EntryPoint {
public void onModuleLoad() {
//建立一个异步接口变量
final RPC_RemoteAsync service = (RPC_RemoteAsync)GWT.create(RPC_Remote.class);
RpcProxy<PagingLoadResult<DTO>> proxy = new RpcProxy<PagingLoadResult<DTO>>() {
@Override
public void load(Object loadConfig,AsyncCallback<PagingLoadResult<DTO>> callback) {
service.loadData((PagingLoadConfig) loadConfig, callback);
}
};
final BasePagingLoader<PagingLoadResult<ModelData>> loader = new BasePagingLoader<PagingLoadResult<ModelData>>(
proxy, new BeanModelReader());
loader.setRemoteSort(true);
final ListStore<BeanModel> store = new ListStore<BeanModel>(loader);
//分页修改
final PagingToolBar toolBar = new PagingToolBar(5);
toolBar.bind(loader);
RowNumberer r = new RowNumberer();
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
columns.add(r);
ColumnConfig alterid = new ColumnConfig("id","SequenceID",100);
alterid.setHidden(true);
columns.add(alterid);
columns.add(new ColumnConfig("username", "用户名", 150));
columns.add(new ColumnConfig("username1", "密码", 150));
columns.add(new ColumnConfig("userfull2", "用户姓名", 150));
columns.add(new ColumnConfig("officephone3", "办公电话", 150));
columns.add(new ColumnConfig("cellphone4", "手机", 150));
ColumnModel cm = new ColumnModel(columns);
final Grid<BeanModel> grid = new Grid<BeanModel>(store, cm);
grid.addListener(Events.Attach, new Listener<GridEvent<BeanModel>>() {
public void handleEvent(GridEvent<BeanModel> be) {
loader.load(0, 5);
}
});
grid.setLoadMask(true);
grid.setBorders(true);
grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
ContentPanel panel = new ContentPanel();
panel.setFrame(true);
panel.setCollapsible(false);
panel.setAnimCollapse(false);
panel.setButtonAlign(HorizontalAlignment.CENTER);
panel.setHeading("用户信息");
panel.setLayout(new FitLayout());
panel.add(grid);
panel.setSize(600, 350);
panel.setBottomComponent(toolBar);
/****************************************************************************************************************
*
*
*****************************************************************************************************************/
//建立panel2
ContentPanel panel2 = new ContentPanel();
panel2.setHeaderVisible(false);
panel2.setBodyStyle("backgroundColor:transparent;");
FormData formData= new FormData("-20");
final FormPanel form2 = new FormPanel();
form2.setFrame(true);
form2.setHeading("用户信息编辑框");
form2.setWidth(350);
form2.setLayout(new FlowLayout());
FieldSet fieldSet = new FieldSet();
FormLayout layout = new FormLayout();
layout.setLabelWidth(100);
fieldSet.setLayout(layout);
final HiddenField <String> firstName0 = new HiddenField<String>();
firstName0.setName("id");
firstName0.setFieldLabel("ID");
fieldSet.add(firstName0, formData);
final TextField<String> firstName = new TextField<String>();
firstName.setName("username");
firstName.setFieldLabel("用户名");
firstName.setEmptyText("填写用户名");
firstName.setAllowBlank(false);
fieldSet.add(firstName, formData);
final TextField<String> firstName1 = new TextField<String>();
firstName1.setName("username1");
firstName1.setFieldLabel("密码");
firstName1.setEmptyText("填写密码");
firstName1.setAllowBlank(false);
fieldSet.add(firstName1, formData);
final TextField<String> firstName2 = new TextField<String>();
firstName2.setName("userfull2");
firstName2.setFieldLabel("用户姓名");
fieldSet.add(firstName2, formData);
final TextField<String> firstName3 = new TextField<String>();
firstName3.setName("officephone3");
firstName3.setFieldLabel("办公电话");
fieldSet.add(firstName3, formData);
final TextField<String> firstName4 = new TextField<String>();
firstName4.setName("cellphone4");
firstName4.setFieldLabel("手机");
fieldSet.add(firstName4, formData);
form2.add(fieldSet);
form2.setButtonAlign(HorizontalAlignment.CENTER);
Button testbutton = new Button("修改");
testbutton.addListener(Events.OnClick, new Listener<ButtonEvent>() {
public void handleEvent(ButtonEvent be) {
String ts;
ts = firstName.getValue();
if(ts== null){
MessageBox.alert("提示", "请选择需要修改的内容",null);
}else{
List<Record> test = store.getModifiedRecords();
//获得修改过的数据
int type_op = 1;
int i;
int id;
String pword;
String name;
String useful;
String offph;
String celph;
String cmd="haha";
AddServiceAsync add=GWT.create(AddService.class);
for(i = 0; i< test.size();i++)
{
id = Integer.parseInt(test.get(i).get("id").toString());
name = test.get(i).get("username").toString();
name=name.trim();
pword = (test.get(i).get("username1").toString());
pword=pword.trim();
useful = (test.get(i).get("userfull2").toString());
useful=useful.trim();
offph = (test.get(i).get("officephone3").toString());
offph=offph.trim();
celph = (test.get(i).get("cellphone4").toString());
celph=celph.trim();
if(name.length()==0 || pword.length()==0 )
{
MessageBox.alert("提示", "用户名和密码信息不能缺省",null);
}else
{
cmd = "update Personmanage set UserName = '" + name + "', PassWord='" + pword + "', UserFullName='" + useful + "',
OfficePhone='" + offph + "', CellPhone='" + celph + "'where SequenceID="+ id;
add.add(cmd,name,type_op,id,
new AsyncCallback<Integer>(){
public void onFailure(Throwable caught){
//Info.display("修改", "失败");
MessageBox.alert("提示", "修改失败",null);
}
public void onSuccess(Integer addResult){
if(addResult == 1)
{
Info.display("提示", "修改成功");
grid.getStore().commitChanges();
}
else if(addResult == 2)
{
//Info.display("Click", "name exist");
MessageBox.alert("提示", "用户名已存在",null);
}
else if(addResult == 0)
{
//Info.display("Click", "name can not have ''");
MessageBox.alert("提示", "用户信息中不能包含单引号",null);
}
}
});
loader.load(0, 5);
}
loader.load(0, 5);
}}
}
});
form2.addButton(testbutton);
form2.addButton(new Button("添加",new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
int type_op = 2;
String pword;
String name;
String useful;
String offph;
String celph;
String cmd="haha";
AddServiceAsync add=GWT.create(AddService.class);
name = firstName.getValue();
pword = firstName1.getValue();
useful = firstName2.getValue();
offph = firstName3.getValue();
celph = firstName4.getValue();
if(name== null || pword== null )
{
MessageBox.alert("提示", "用户名和密码信息不能缺省",null);
form2.reset();
}else
{
if(useful == null)
{
useful = "";
}
if(offph== null)
{
offph = "";
}
if(celph== null)
{
celph = "";
}
cmd = "insert into Personmanage (UserName,PassWord,UserFullName,OfficePhone,CellPhone,Reserved1,Reserved2,Reserved3,Reserved4) values
('"+name+"','"+pword+"','"+useful+"','"+offph+"','"+celph+"','"+null+"','"+null+"','"+0+"','"+0+"')";
add.add(cmd,name,type_op,1,
new AsyncCallback<Integer>(){
public void onFailure(Throwable caught){
MessageBox.alert("提示", "添加失败",null);
}
public void onSuccess(Integer addResult){
if(addResult == 1)
{
Info.display("提示", "添加成功");
}
else if(addResult == 2)
{
MessageBox.alert("提示", "用户名已存在",null);
}
else if(addResult == 0)
{
MessageBox.alert("提示", "用户信息中不能包含单引号",null);
}
}
});
loader.load(0, 5);
form2.reset();
}
}
}));
form2.addButton(new Button("删除",new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
{
int type_op = 3;
String name;
String cmd="haha";
AddServiceAsync add=GWT.create(AddService.class);
name = firstName.getValue();
if(name== null){
MessageBox.alert("提示", "请选择需要删除的内容",null);
}else{
cmd = "delete from Personmanage where UserName='"+name+"'";
add.add(cmd,name,type_op,1,
new AsyncCallback<Integer>(){
public void onFailure(Throwable caught){
MessageBox.alert("提示", "删除失败",null);
}
public void onSuccess(Integer addResult){
Info.display("提示", "删除成功");
}
});
loader.load(0, 5);
}
}
}
}));
final FormBinding formBindings = new FormBinding(form2, true);
formBindings.setStore((Store) grid.getStore());
//添加清空功能按钮
Button btn = new Button("重置");
btn.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
form2.reset();
loader.load(0, 5);
}
});
form2.addButton(btn);
panel2.add(form2);
//
grid.getSelectionModel().addListener(Events.SelectionChange,
new Listener<SelectionChangedEvent<Stock>>() {
public void handleEvent(SelectionChangedEvent<Stock> be) {
if (be.getSelection().size() > 0) {
formBindings.bind((ModelData) be.getSelection().get(0));
} else {
formBindings.unbind();
}
}
});
//east panel data;
BorderLayoutData eastData = new BorderLayoutData(Style.LayoutRegion.EAST,350);
eastData.setMargins(new Margins(5,5,5,5));
eastData.setCollapsible(true);
eastData.setFloatable(true);
eastData.setSplit(true);
Viewport viewport = new Viewport();
viewport.setLayout(new BorderLayout());
viewport.setSize(300,300);
BorderLayoutData centerData = new BorderLayoutData(Style.LayoutRegion.CENTER);
centerData.setMargins(new Margins(5,5,5,0));
viewport.add(panel2,eastData);
viewport.add(panel,centerData);
RootPanel.get().add(viewport);
}
}
相关推荐
GXT是EXT-GWT的简称,它提供了丰富的用户界面组件,允许开发者用Java代码来构建复杂的、桌面级的Web应用。EXT-GWT 2.2.4是该框架的一个版本,它包含了对Java API的详细文档,方便开发者查阅和学习。 此CHM版的API...
EXT-GWT,全称为Ext GWT,是Sencha公司开发的一个强大的Java库,用于构建富互联网应用程序(RIA)。GXT是EXT-GWT的扩展,它提供了更多组件、样式和功能,使得开发者能够创建出与桌面应用相媲美的用户体验。GXT 2.2.3...
它基于Google Web Toolkit (GWT),提供了丰富的UI组件和功能,使得开发者可以使用Java语言来编写前端代码,然后由GWT编译器转换为优化过的JavaScript。在本篇内容中,我们将探讨如何搭建一个简单的EXT-GWT(GXT)...
综上所述,EXT-GWT的分页功能为开发者提供了高效的数据管理方案,使得在大量数据的Web应用中,用户能够流畅地浏览和操作数据。通过深入理解并实践EXT-GWT的分页组件,开发者可以构建出更加用户友好的数据展示界面。
Google Plugin for Eclipse包含了GWT的开发工具,使得在Eclipse中编写、测试和调试GWT应用变得更加便捷。你可以从提供的链接下载这两个工具:http://code.google.com/intl/zh-CN/webtoolkit/download.html。 安装...
EXT-GWT(GXT)是一种基于Google Web Toolkit (GWT) 的高级用户界面库,它提供了丰富的组件和样式,使得开发者能够构建出复杂的、企业级的Web应用。本篇文章将聚焦于如何在EXT-GWT中整合Spring框架和Hibernate ORM,...
EXT-GWT(Ext GWT)是Sencha公司开发的一个强大的JavaScript库,它允许开发者使用Java语言来编写富互联网应用程序(Rich Internet Applications,RIA)。EXT-GWT提供了丰富的组件库,包括表格、面板、表单、菜单等,...
EXT-GWT 2.2.0 API DOC (gxt) chm 版 。 2010年10月制作。完美的搜索功能。如果打不开,请选中它,点右键 看属性,选择解除锁定。别再抱怨打不开了。
整合这三个框架,开发者可以创建一个高效、可维护的后端服务,通过Spring管理业务逻辑和服务,使用Hibernate处理数据库操作,而GWT则负责构建用户友好的、响应式的前端界面。在开发过程中,GWT和Spring之间的通信...
EXT-GWT(GXT) 2.2.4 JAVA API DOC chm 版.完美的的搜索功能,支持全文检索。2011年11月制作。如果打不开,请选中它,点右键 看属性,选择解除锁定。别再抱怨打不开了。
" Gwt-Ext学习笔记之基础篇.doc "、" Gwt-Ext学习笔记之中级篇.doc "、" Gwt-Ext学习笔记之进级篇.doc "这三份文档,按照从基础到进阶的顺序,系统地介绍了EXT-GWT的使用技巧和实践案例。基础篇可能涵盖EXT-GWT的...
GWT(Google Web Toolkit)和Ext JS是两个在Web开发领域广泛应用的技术,它们结合形成的Gwt-ext库,为开发者提供了一种构建富客户端应用程序的强大工具。这篇学习笔记将深入探讨Gwt-ext的核心概念、功能以及如何在实际...
gxt的下载非常好,ext-gwt的下载非常好
EXT-GWT 2.2.3 API DOC (gxt) chm 版,完美的的搜索功能,支持全文检索。2011年3月制作。如果打不开,请选中它,点右键 看属性,选择解除锁定。别再抱怨打不开了。
6. **分页和无限滚动(Paging and Infinite Scrolling)**:对于包含大量数据的树,GWT-Ext-Tree 可以实现分页加载,只在需要时加载部分数据,提高页面性能。同时,无限滚动功能可以让用户在滚动时动态加载更多节点...
《GWT-EXT2.0最佳实践教程》源代码打包下载资源主要涵盖了Google Web Toolkit (GWT) 和EXT-JS 2.0的结合使用,提供了丰富的实践案例和示例代码,旨在帮助开发者深入理解和应用这两项技术。GWT是一款强大的JavaScript...
EXT-GWT2.1.0 java api 文档 chm格式方便查找2010年7月制作 完美的搜索,支持全文检索功能。另新版本EXT-GWT2.2.0 java api 已可用请到http://download.csdn.net/source/2700814 下载
标题中的“gwt和tomcat整合”指的是将Google Web Toolkit (GWT) 应用程序部署到Apache Tomcat服务器的过程。GWT是一个开源的Java框架,用于开发在浏览器上运行的富互联网应用程序(RIA),而Tomcat是一款流行的、开源...
### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....