Qt: 学生信息管理里系统,QTreewidget、QTableView实现

2023-10-08 17:58

本文主要是介绍Qt: 学生信息管理里系统,QTreewidget、QTableView实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//源码下载地址: http://download.csdn.net/detail/rl529014/9666234                                         

C++、Qt学习交流群: 302558294(欢迎你的加入)

需求:

做一个简单的产品信息管理界面,能够新增,修改,删除产品信息;(所有数据均保存在内存中)

a.学生信息包括(姓名,学校(金牛小学,青羊小学),班级(1班,2班,3班),年龄,性别,身高,政治面貌,个人描述(不超过300字符)

b.界面左边采用QTreeWidget或相关控件显示学校、班级两级信息;

c.界面右边使用QListWidget或相关控件显示选中班级所有成员信息;

d.新增,修改,删除功能均使用菜单来完成;


程序界面展示:

(很多功能还不完善,本例仅供参考,欢迎大家补充)



所用技术:

1、实现自定义委托。

2、QTreewidget、QTableView,

3、MVC模式。

4、菜单栏的功能都可以在对应的控件上右击,弹出快捷菜单。

5、界面布局。


代码:

//main.cpp

<span style="font-size:14px;">#include <QApplication>
#include "widget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);StuInfoManagementSystem w;w.show();return a.exec();
}
</span>


//widget.h

<span style="font-size:14px;">#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QStandardItemModel>
#include <QTableView>
#include <QMenu>
#include <QAction>
#include <QMenuBar>
#include <QTreeView>
#include <QTreeWidget>
#include <QStandardItem>
#include "controldelegate.h"class SpinboxDelegate;
class ComboboxDelegate;//namespace Ui {
//class StuInfoManagementSystem;
//}class StuInfoManagementSystem: public QWidget
{Q_OBJECTpublic:explicit StuInfoManagementSystem(QWidget *parent = 0);~StuInfoManagementSystem();public:void contextMenuEvent(QContextMenuEvent *e);void menuBarInit(); //菜单初始化void tableWidgetInit(); //table控件初始化void treeWidgetInit();void closeEvent(QCloseEvent *event);//程序关闭时触发void upDateTableView();private:QMenu *OperationMenu;  //操作菜单QAction *DeleteAction;QAction *InsertAction;QMenu *helpMenu; //帮助菜单QAction *aboutAction;QAction *aboutQtAction;QMenu *schoolAndGradeMenu;QAction *addSchoolAction;QAction *addGradeAction;QAction *delSchoolOrGradeAction;QMenuBar* menuBar;SpinboxDelegate* ageSpinbox;//年龄SpinboxDelegate* heightSpinbox; //身高ComboboxDelegate* schoolCombobox;//学校ComboboxDelegate* gradeCombobox;//班级ComboboxDelegate* sexCombobox; //性别ComboboxDelegate* statusCombobox; //政治面貌private slots:void sltInsertAction();void sltDeleteAction();void sltAddSchoolAction();void sltAddGradeAction();void sltDelSchoolOrGradeAction();void sltAboutAction();void SlotItemClicked(QTreeWidgetItem *item, int column);private:QStandardItemModel* tableModel;QTableView* table;QStandardItem *dataSources;QTreeWidget *treeWidget;//private:
//    Ui::StuInfoManagementSystem *ui;
};#endif // WIDGET_H
</span>

//widget.cpp

<span style="font-size:14px;">#include <QSplitter>
#include <QFileSystemModel>
#include <QTreeView>
#include <QListView>
#include <QVBoxLayout>
#include <QAbstractItemModel>
#include <QTableView>
#include <QMenuBar>
#include <QVBoxLayout>
#include <QDebug>
#include <QTreeWidgetItem>
#include <controldelegate.h>
#include <QToolTip>
#include <QAbstractItemView>
#include <QStandardItem>
#include <QList>
#include <QStandardItem>
#include <QMessageBox>
#include <QInputDialog>
#include "widget.h"
#include "ui_widget.h"StuInfoManagementSystem::StuInfoManagementSystem(QWidget *parent) : QWidget(parent)/*,ui(new Ui::StuInfoManagementSystem)*/
{setMinimumSize(1200,400);menuBarInit();//菜单初始化tableWidgetInit(); //table初始化treeWidgetInit(); //tree初始化QGridLayout *grid = new QGridLayout;grid->addWidget(menuBar,0,0,1,2);grid->addWidget(treeWidget,1,0);grid->addWidget(table,1,1);setLayout(grid);showMaximized();
}StuInfoManagementSystem::~StuInfoManagementSystem()
{//delete ui;
}void StuInfoManagementSystem::contextMenuEvent(QContextMenuEvent *e) //重写上下文事件
{//方法一if(table->hasFocus()){OperationMenu->move(cursor().pos());OperationMenu->show();}if(treeWidget->hasFocus()){schoolAndGradeMenu->move(cursor().pos());schoolAndGradeMenu->show();}//方法二//    {//        table->addAction(InsertAction);//        table->addAction(DeleteAction);//        table->setContextMenuPolicy(Qt::ActionsContextMenu);//    }
}void StuInfoManagementSystem::menuBarInit()
{menuBar = new QMenuBar(0);OperationMenu = new QMenu(QString::fromLocal8Bit("学生"));DeleteAction = new QAction(QString::fromLocal8Bit("删除"));InsertAction = new QAction(QString::fromLocal8Bit("插入"));OperationMenu->addAction(DeleteAction);OperationMenu->addAction(InsertAction);helpMenu = new QMenu(QString::fromLocal8Bit("帮助"));aboutAction = new QAction(QString::fromLocal8Bit("关于软件"));aboutQtAction = new QAction(QString::fromLocal8Bit("关于Qt"));helpMenu->addAction(aboutAction);helpMenu->addAction(aboutQtAction);schoolAndGradeMenu = new QMenu(QString::fromLocal8Bit("学校/班级"));addSchoolAction = new QAction(QString::fromLocal8Bit("添加 学校"));addGradeAction = new QAction(QString::fromLocal8Bit("添加 班级"));delSchoolOrGradeAction = new QAction(QString::fromLocal8Bit("删除"));schoolAndGradeMenu->addAction(addSchoolAction);schoolAndGradeMenu->addAction(addGradeAction);schoolAndGradeMenu->addAction(delSchoolOrGradeAction);menuBar->addMenu(schoolAndGradeMenu);menuBar->addMenu(OperationMenu);menuBar->addMenu(helpMenu);connect(InsertAction,SIGNAL(triggered(bool)),SLOT(sltInsertAction()));connect(DeleteAction,SIGNAL(triggered(bool)),SLOT(sltDeleteAction()));connect(addSchoolAction,SIGNAL(triggered(bool)),SLOT(sltAddSchoolAction()));connect(addGradeAction,SIGNAL(triggered(bool)),SLOT(sltAddGradeAction()));connect(delSchoolOrGradeAction,SIGNAL(triggered(bool)),SLOT(sltDelSchoolOrGradeAction()));connect(aboutAction,SIGNAL(triggered(bool)),SLOT(sltAboutAction()));connect(aboutQtAction,SIGNAL(triggered(bool)),qApp,SLOT(aboutQt()));}void StuInfoManagementSystem::tableWidgetInit()
{//tableview初始化{table  = new QTableView;tableModel = new QStandardItemModel;table->setModel(tableModel);tableModel->setHorizontalHeaderItem(0,new QStandardItem(QString::fromLocal8Bit("姓名")));tableModel->setHorizontalHeaderItem(1,new QStandardItem(QString::fromLocal8Bit("学校")));tableModel->setHorizontalHeaderItem(2,new QStandardItem(QString::fromLocal8Bit("班级")));tableModel->setHorizontalHeaderItem(3,new QStandardItem(QString::fromLocal8Bit("年龄")));tableModel->setHorizontalHeaderItem(4,new QStandardItem(QString::fromLocal8Bit("性别")));tableModel->setHorizontalHeaderItem(5,new QStandardItem(QString::fromLocal8Bit("身高")));tableModel->setHorizontalHeaderItem(6,new QStandardItem(QString::fromLocal8Bit("政治面貌")));tableModel->setHorizontalHeaderItem(7,new QStandardItem(QString::fromLocal8Bit("个人描述")));// 姓名,学校(金牛小学,青羊小学),班级(1班,2班,3班),年龄,性别,身高,政治面貌,个人描述(不超过300字符)table->setModel(tableModel);table->horizontalHeader()->setStretchLastSection(true);table->setItemDelegateForColumn(1, new ComboboxDelegate);table->setItemDelegateForColumn(2,new ComboboxDelegate);table->setItemDelegateForColumn(3,new SpinboxDelegate(3));table->setItemDelegateForColumn(4,new ComboboxDelegate);table->setItemDelegateForColumn(5,new SpinboxDelegate(5));table->setItemDelegateForColumn(6,new ComboboxDelegate);table->setEditTriggers(QAbstractItemView::DoubleClicked);table->setSelectionBehavior(QAbstractItemView::SelectRows);}
}void StuInfoManagementSystem::treeWidgetInit()
{treeWidget = new QTreeWidget;treeWidget->setMaximumWidth(200);treeWidget->setHeaderLabel(QString::fromLocal8Bit("学校/班级"));QTreeWidgetItem *qingYang = new  QTreeWidgetItem;qingYang->setText(0,QString::fromLocal8Bit("青羊小学"));QTreeWidgetItem  *jinNiu = new QTreeWidgetItem;jinNiu->setText(0,QString::fromLocal8Bit("金牛小学"));QStringList classlist;classlist << QString::fromLocal8Bit("1班") << QString::fromLocal8Bit("2班")<< QString::fromLocal8Bit("3班");for(int i=0;i<=2;i++){QTreeWidgetItem *tmp_qingYang = new  QTreeWidgetItem(qingYang);tmp_qingYang->setText(0,classlist.at(i));qingYang->addChild(tmp_qingYang);QTreeWidgetItem  *tmp_jinNiu = new QTreeWidgetItem(jinNiu);tmp_jinNiu->setText(0,classlist.at(i));jinNiu->addChild(tmp_jinNiu);}treeWidget->insertTopLevelItem(0,qingYang);treeWidget->insertTopLevelItem(1,jinNiu);connect(treeWidget,SIGNAL(itemPressed(QTreeWidgetItem *, int)),SLOT(SlotItemClicked(QTreeWidgetItem *, int)));
}void StuInfoManagementSystem::closeEvent(QCloseEvent *event)
{qDebug()<<"Application close";
}void StuInfoManagementSystem::sltInsertAction() //插入行操作
{QList<QStandardItem*> item;item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.at(0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); //设置指定项的对齐方式item.at(7)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);tableModel->insertRow(tableModel->rowCount(),item);
}void StuInfoManagementSystem::sltDeleteAction() //删除指定行操作
{int curreantRow = table->currentIndex().row(); //获取当前行数tableModel->removeRow(curreantRow);
}void StuInfoManagementSystem::sltAddSchoolAction()
{bool ok;QString text = QInputDialog::getText(this,"Please Input School Name",tr("School name:"),QLineEdit::Normal,tr(""),&ok);if(ok && !text.isEmpty()){QTreeWidgetItem *item = new QTreeWidgetItem;item->setText(0,text);int schoolCount = treeWidget->topLevelItemCount();treeWidget->insertTopLevelItem(schoolCount,item);}
}void StuInfoManagementSystem::sltAddGradeAction()
{if(treeWidget->currentItem()){bool ok;QString text = QInputDialog::getText(this,"Please Input Grade Name",tr("Grade name:"),QLineEdit::Normal,tr(""),&ok);if(ok && !text.isEmpty()){QTreeWidgetItem *item = new QTreeWidgetItem;item->setText(0,text);if(treeWidget->currentItem()->parent())//当前选中的是班级{for(int i = 0; i< treeWidget->currentItem()->parent()->childCount(); i++) //同一个学校的班级不能重复{if(treeWidget->currentItem()->parent()->child(i)->text(0) == text){QMessageBox::information(this, QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("%1 已经存在").arg(text));return;}}treeWidget->currentItem()->parent()->addChild(item);}else{for(int i = 0; i< treeWidget->currentItem()->childCount(); i++) //同一个学校的班级不能重复{if(treeWidget->currentItem()->child(i)->text(0) == text){QMessageBox::information(this, QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("%1 已经存在").arg(text));return;}}treeWidget->currentItem()->addChild(item);}}}treeWidget->expandAll();
}void StuInfoManagementSystem::sltDelSchoolOrGradeAction()
{QTreeWidgetItem *item = treeWidget->currentItem();if(!item->parent()){treeWidget->takeTopLevelItem(treeWidget->indexOfTopLevelItem(treeWidget->currentItem()));}else{QTreeWidgetItem *parent = item->parent();if(parent){parent->removeChild(item);}}
}void StuInfoManagementSystem::sltAboutAction()
{QMessageBox::about(this, tr("About Aoftware"),tr("Make By Hero"));
}void StuInfoManagementSystem::SlotItemClicked(QTreeWidgetItem *item, int column)
{//学校1,班级2 if(item->parent()) //当前item为子项{for(int row = 0; row <= tableModel->rowCount();row++){if(item->text(column) == tableModel->data(tableModel->index(row,2)).toString())  //班级{if(item->parent()->text(column) ==tableModel->data(tableModel->index(row,1)).toString()) //学校table->setRowHidden(row,false);elsetable->setRowHidden(row,true);}else{table->setRowHidden(row,true);}}}else //当前点击的item为父项{if(item->text(column) == QString::fromLocal8Bit("青羊小学")){for(int row = 0; row <= tableModel->rowCount();row++){if(tableModel->data(tableModel->index(row,1)).toString() != QString::fromLocal8Bit("青羊小学"))table->setRowHidden(row,true);elsetable->setRowHidden(row,false);}}else if(item->text(column) == QString::fromLocal8Bit("金牛小学")){for(int row = 0; row <= tableModel->rowCount();row++){if(tableModel->data(tableModel->index(row,1)).toString() != QString::fromLocal8Bit("金牛小学"))table->setRowHidden(row,true);elsetable->setRowHidden(row,false);}}}
}
</span>

//controldelegate

<span style="font-size:14px;">#ifndef CONTROLDELEGATE_H
#define CONTROLDELEGATE_H
#include <QItemDelegate>
#include <QObject>class SpinboxDelegate : public QItemDelegate  //年龄
{Q_OBJECTpublic:SpinboxDelegate(int column);QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;//void setEditorData(QWidget *editor, const QModelIndex &index) const ;void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const ;void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;//void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;private slots:void commitAndCloseEditor();private:int mColumn;
};class ComboboxDelegate : public QItemDelegate  //学校
{Q_OBJECTpublic:ComboboxDelegate();QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;private slots:void commitAndCloseEditor();
};#endif // CONTROLDELEGATE_H
</span>

//controldelegate.cpp

<span style="font-size:14px;">#include <QSpinBox>
#include <QComboBox>
#include <QDebug>
#include <QApplication>
#include <QStyleOptionViewItem>
#include <QDomDocument>
#include <QFile>
#include <QTextStream>
#include "controldelegate.h"
SpinboxDelegate::SpinboxDelegate(int column)
{mColumn = column;
}//为指定的列或者行创建部件
QWidget *SpinboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const
{if(index.column() ==3) //年龄{QSpinBox *editor = new QSpinBox(parent);editor->setRange(1,110);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if( index.column() == 5) //身高{QSpinBox *editor = new QSpinBox(parent);editor->setRange(120,220);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else{return QItemDelegate::createEditor(parent,option,index);}
}//显示格式控制
void SpinboxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{if(index.column()== 5){int age = index.model()->data(index,Qt::DisplayRole).toInt();QString text = QString("%1 CM").arg(age,3,10,QChar(' '));QStyleOptionViewItem myOption = option;myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;drawDisplay(painter,myOption,myOption.rect,text);drawFocus(painter,myOption,myOption.rect);}else if(index.column() == 3){int height = index.model()->data(index,Qt::DisplayRole).toInt();QString text = QString("%1 Year").arg(height,3,10,QChar(' '));QStyleOptionViewItem myOption = option;myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;drawDisplay(painter,myOption,myOption.rect,text);drawFocus(painter,myOption,myOption.rect);}
}void SpinboxDelegate::commitAndCloseEditor()
{QSpinBox *editor = qobject_cast<QSpinBox*>(sender());emit commitData(editor);emit closeEditor(editor);
}//void SpinboxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
//{//}void SpinboxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{QSpinBox *spinBox = static_cast<QSpinBox*>(editor);spinBox->interpretText();int value = spinBox->value();model->setData(index, value, Qt::EditRole);
}ComboboxDelegate::ComboboxDelegate()
{}QWidget *ComboboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{QComboBox *editor = new QComboBox(parent);if(index.column() == 1){editor->addItem(QString::fromLocal8Bit("青羊小学"));editor->addItem(QString::fromLocal8Bit("金牛小学"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if(index.column() == 2){editor->addItem(QString::fromLocal8Bit("1班"));editor->addItem(QString::fromLocal8Bit("2班"));editor->addItem(QString::fromLocal8Bit("3班"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if(index.column() == 4){editor->addItem(QString::fromLocal8Bit("男"));editor->addItem(QString::fromLocal8Bit("女"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if(index.column() == 6){editor->addItem(QString::fromLocal8Bit("群众"));editor->addItem(QString::fromLocal8Bit("共青团员"));editor->addItem(QString::fromLocal8Bit("共产党员"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else{QItemDelegate::createEditor(parent,option,index);}
}void ComboboxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{if(index.column() == 1 || index.column() == 2 ||index.column() == 4 ||index.column() == 6){QString text = index.model()->data(index , Qt::DisplayRole).toString();QStyleOptionViewItem myOption = option;myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;drawDisplay(painter,myOption,myOption.rect,text);drawFocus(painter,myOption,myOption.rect);}else{QItemDelegate::paint(painter,option,index);}
}void ComboboxDelegate::commitAndCloseEditor()
{QComboBox *editor = qobject_cast<QComboBox*>(sender());emit commitData(editor);emit closeEditor(editor);
}
</span>

这篇关于Qt: 学生信息管理里系统,QTreewidget、QTableView实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167018

相关文章

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll