这一张主要是在之前的SSH的基础之上添加了(学生,班级)之间的关系。然后基本的补充信息如下:
数据库信息表:schema.sql
-- 用户信息表
create table tbl_user(
user_no char(6) primary key,
user_pwd char(6) not null,
user_name varchar(30) not null
);
-- 班级信息表
Create table tbl_clazz(
clazz_no int primary key auto_increment,
clazz_name varchar(30) not null,
stu_cnt int not null default 0
);
-- 学生信息表
create table tbl_student(
stu_no char(4) primary key,
stu_name varchar(30) not null,
stu_mark int default 0,
stu_sex char(1),
stu_hobbies char(30),
stu_origin varchar(2),
stu_memp varchar(300),
stu_pic medoumblob,
clazz_no int,
constraint FK_CLAZZ_STU foreign key(clazz_no) references tbl_clazz(clazz_no)
);
insert into tbl_clazz(clazz_name) values('软工一班'),('软工二班'),('软工三班');
insert into tbl_user values('000101','123456','王帅');
insert into tbl_user values('000102','123456','梅梅');
添加的信息:
Clazz.java
/**
* @Title: Clazz.java
* @package: edu.fjnu.training.domain
* @author: Zhou kailun
* @date: 2018年5月30日 下午7:17:24
* @version: V1.0
*/
package edu.fjnu.training.domain;
/**
* ClassName: Clazz 班级类
* Description: 存储一个班级基本信息
* Author: Zhou kailun
*
*/
public class Clazz {
/**班级编号*/
private Integer clazzNo;
/**班级名字*/
private String clazzName;
/**学生人数*/
private Integer stuCnt;
/**
* <p>Title: </p>
* <p>Description: </p>
*/
public Clazz() {
// TODO Auto-generated constructor stub
}
public Integer getClazzNo() {
return clazzNo;
}
public void setClazzNo(Integer clazzNo) {
this.clazzNo = clazzNo;
}
public String getClazzName() {
return clazzName;
}
public void setClazzName(String clazzName) {
this.clazzName = clazzName;
}
public Integer getStuCnt() {
return stuCnt;
}
public void setStuCnt(Integer stuCnt) {
this.stuCnt = stuCnt;
}
}
Student.java
/**
* 工 程 名:TagDemoPrj-20180221 <br>
* 文 件 名:Student.java <br>
* 工具包名:edu.fjnu.domain <br>
* 功能描述:TODO <br>
* 创建时间:2018年5月21日 下午2:00:49 <br>
* 版本信息:V1.0
* @创建人:周开伦
*/
package edu.fjnu.training.domain;
import java.util.Arrays;
/**
* 类名:Student <br>
* 功能描述: <br>
* 创建日期:2018年5月21日 下午2:00:49 <br>
* 修改备注:
* @作者信息:Zhou kailun <br>
*/
public class Student extends ValueObject {
/**学生学号*/
private String stuNo;
/**学生姓名*/
private String stuName;
/**学生性别*/
private String stuSex;
/**学生爱好*/
private String[] stuHobbies;
/**学生爱好字符串:方便hibernate映射*/
private String stuHobbyStr;
/**学生籍贯*/
private String stuOrigin;
/**学生成绩*/
private Integer stuMark;
/**学生备注*/
private String stuMemo;
/**学生照片*/
private byte[] stuPic;
/**学生所在班级*/
private Clazz clazz;
public Student()
{
super();
}
public Student(String stuNo,String stuName,int stuMark)
{
super();
this.stuNo=stuNo;
this.stuName=stuName;
this.stuMark=stuMark;
}
@Override
public String toString() {
return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", stuSex="
+ stuSex + ", stuHobbies=" + Arrays.toString(stuHobbies)
+ ", stuOrigin=" + stuOrigin + ", stuMark=" + stuMark
+ ", stuMemo=" + stuMemo + ", stuPic="
+ Arrays.toString(stuPic) + "]";
}
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public Integer getStuMark() {
return stuMark;
}
public void setStuMark(Integer stuMark) {
this.stuMark = stuMark;
}
public String getStuSex() {
return stuSex;
}
public void setStuSex(String stuSex) {
this.stuSex = stuSex;
}
public String[] getStuHobbies() {
return stuHobbies;
}
public void setStuHobbies(String[] stuHobbies) {
this.stuHobbies = stuHobbies;
if(this.stuHobbies!=null)
{
StringBuilder sb = new StringBuilder();
for(String hobby:this.stuHobbies){
sb.append(hobby).append("|");
}
sb.deleteCharAt(sb.length()-1);
this.stuHobbyStr = sb.toString();
}
else
this.stuHobbyStr =null;
}
public String getStuHobbyStr() {
return stuHobbyStr;
}
public void setStuHobbyStr(String stuHobbyStr) {
this.stuHobbyStr = stuHobbyStr;
if(this.stuHobbyStr!=null){
this.stuHobbies=this.stuHobbyStr.split("\\|");
}
else
this.stuHobbies=null;
}
public String getStuOrigin() {
return stuOrigin;
}
public void setStuOrigin(String stuOrigin) {
this.stuOrigin = stuOrigin;
}
public String getStuMemo() {
return stuMemo;
}
public void setStuMemo(String stuMemo) {
this.stuMemo = stuMemo;
}
public byte[] getStuPic() {
return stuPic;
}
public void setStuPic(byte[] stuPic) {
this.stuPic = stuPic;
}
public Clazz getClazz() {
return clazz;
}
public void setClazz(Clazz clazz) {
this.clazz = clazz;
}
}
Clazz.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="edu.fjnu.training.domain">
<!-- 班级信息与数据库匹配 -->
<class name="Clazz" table="tbl_clazz">
<id name="clazzNo" column="clazz_no" type="java.lang.Integer" >
</id>
<property name="clazzName" column="clazz_name" type="java.lang.String" length="30" not-null="true"></property>
<property name="stuCnt" column="stu_cnt" type="java.lang.Integer" not-null="true"></property>
</class>
</hibernate-mapping>
Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="edu.fjnu.training.domain">
<!-- 学生信息与数据库匹配 -->
<class name="Student" table="tbl_student">
<id name="stuNo" column="stu_no" type="java.lang.String" length="4"></id>
<property name="stuName" column="stu_name" type="java.lang.String" length="30" not-null="true"></property>
<property name="stuMark" column="stu_mark" type="java.lang.Integer" length="11"></property>
<property name="stuSex" column="stu_sex" type="java.lang.String" length="2"></property>
<property name="stuHobbyStr" column="stu_hobbies" type="java.lang.String" length="30"></property>
<property name="stuOrigin" column="stu_origin" type="java.lang.String" length="2"></property>
<property name="stuMemo" column="stu_memo" type="java.lang.String" length="30"></property>
<property name="stuPic" column="stu_pic" type="binary"></property>
<many-to-one name="clazz" class="Clazz" column="clazz_no" lazy="false"></many-to-one>
</class>
</hibernate-mapping>
ClazzDao.java
/**
* @Title: ClazzDao.java
* @package: edu.fjnu.training.dao
* @author: Zhou kailun
* @date: 2018年5月30日 下午7:46:45
* @version: V1.0
*/
package edu.fjnu.training.dao;
import java.util.List;
import edu.fjnu.training.domain.Clazz;
/**
* ClassName: ClazzDao
* Description: TODO
* Author: Zhou kailun
*
*/
public interface ClazzDao {
/**
* Title:增加班级信息<br>
* Description: 增加班级记录<br>
* @param clazz 班级对象
* @return void
* @throws
*/
public void addClazz(Clazz clazz);
/**
* Title: 加载班级列表<br>
* Description:加载所有班级列表 <br>
* @return List<Clazz> 班级列表
* @throws
*/
public List<Clazz> listClazz();
/***
* Title:更新班级信息<br>
* Description:更新班级信息,主要更新班级数量 <br>
* @param clazz :
* @return void
* @throws
*/
public void updateClazz(Clazz clazz);
/**
* Title: 获得班级信息<br>
* Description: 更具班级编号,获取班级信息<br>
* @param clazzNo 班级编号
* @return Clazz 班级信息
* @throws
*/
public Clazz loadClazzByNo(Integer clazzNo);
}
ClazzDaoHibernateImpl.java
/**
* @Title: ClazzDaoHibernateImpl.java
* @package: edu.fjnu.training.dao
* @author: Zhou kailun
* @date: 2018年5月30日 下午7:54:26
* @version: V1.0
*/
package edu.fjnu.training.dao;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import edu.fjnu.training.domain.Clazz;
import edu.fjnu.training.utils.HibernateUtils;
/**
* ClassName: ClazzDaoHibernateImpl
* Description: TODO
* Author: Zhou kailun
*
*/
public class ClazzDaoHibernateImpl implements ClazzDao {
/**
* <p>Title: </p>
* <p>Description: </p>
*/
public ClazzDaoHibernateImpl() {
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* <p>Title: addClazz </p>
* <p>Description: </p>
* @param clazz
* @see edu.fjnu.training.dao.ClazzDao#addClazz(edu.fjnu.training.domain.Clazz)
*/
@Override
public void addClazz(Clazz clazz) {
Session session=HibernateUtils.createSession();
Transaction trans=null;
try{
trans=session.beginTransaction();
session.save(clazz);
trans.commit();
}catch(HibernateException e){
e.printStackTrace();
trans.rollback();
}finally{
if(session.isOpen()){
session.close();
}
}
}
/* (non-Javadoc)
* <p>Title: listClazz </p>
* <p>Description: </p>
* @return
* @see edu.fjnu.training.dao.ClazzDao#listClazz()
*/
@Override
public List<Clazz> listClazz() {
Session session=HibernateUtils.createSession();
Transaction trans=null;
List<Clazz> clazzList=null;
try{
String hql="from Clazz c order by c.clazzNo";
clazzList=session.createQuery(hql).list();
trans=session.beginTransaction();
trans.commit();
}catch(HibernateException e){
e.printStackTrace();
trans.rollback();
}finally{
if(session.isOpen()){
session.close();
}
}
return clazzList;
}
@Override
public void updateClazz(Clazz clazz) {
Session session=HibernateUtils.createSession();
Transaction trans=null;
try{
trans=session.beginTransaction();
session.saveOrUpdate(clazz);
trans.commit();
}catch(HibernateException e){
e.printStackTrace();
trans.rollback();
}finally{
if(session.isOpen()){
session.close();
}
}
}
@Override
public Clazz loadClazzByNo(Integer clazzNo) {
Session session=HibernateUtils.createSession();
Transaction trans=null;
Clazz clazz=null;
try{
trans=session.beginTransaction();
clazz=session.get(Clazz.class,clazzNo);
trans.commit();
}catch(HibernateException e){
e.printStackTrace();
trans.rollback();
}finally{
if(session.isOpen()){
session.close();
}
}
return clazz;
}
}
接下来主要是更改了StudentService的实现方法。如下
StudentServiceImpl.java
增加操作:addStudent()
public void addStudent(Student stu) {
// TODO Auto-generated method stub
StudentDao stuDao=new StudentDaoHibernateImpl();
stuDao.addStudent(stu);
/*更新班级学生人数*/
ClazzDao clazzDao=new ClazzDaoHibernateImpl();
Clazz clazz=clazzDao.loadClazzByNo(stu.getClazz().getClazzNo());
clazz.setStuCnt(clazz.getStuCnt()+1);
clazzDao.updateClazz(clazz);
}
删除操作:
public void removeStudent(String stuNo) {
// TODO Auto-generated method stub
StudentDao stuDao=new StudentDaoHibernateImpl();
ClazzDao clazzDao=new ClazzDaoHibernateImpl();
Clazz clazz=stuDao.getStudentByStuNo(stuNo).getClazz();
if(clazz!=null){
clazz.setStuCnt(clazz.getStuCnt()-1);
}
stuDao.removeStudent(stuNo);
clazzDao.updateClazz(clazz);
}
更新操作:
public void updateStudent(Student stu) {
StudentDao stuDao=new StudentDaoHibernateImpl();
ClazzDao clazzDao=new ClazzDaoHibernateImpl();
Clazz oldClazz = stuDao.getStudentByStuNo(stu.getStuNo()).getClazz();
//发现转班级操作
Clazz newClazz=clazzDao.loadClazzByNo(stu.getClazz().getClazzNo());
if(oldClazz!=null && newClazz!=null && oldClazz.getClazzNo()!=newClazz.getClazzNo()){
//以前有班级的同学
oldClazz.setStuCnt(oldClazz.getStuCnt()-1);
newClazz.setStuCnt(newClazz.getStuCnt()+1);
clazzDao.updateClazz(oldClazz);
clazzDao.updateClazz(newClazz);
}
else if(newClazz!=null && oldClazz==null){
newClazz.setStuCnt(newClazz.getStuCnt()+1);
clazzDao.updateClazz(newClazz);
}
stuDao.updateStudent(stu);
}
学生Action主要增加了学生班级字段;然后对相应数据进行保存操作。将loadAll改成了loadStudents方法;struts-student.xml也进行了相应的操作。
StudentAction.java
/**
* 工 程 名:SMS-SSH-20180524 <br>
* 文 件 名:StudentAction.java <br>
* 工具包名:edu.fjnu.training.action <br>
* 功能描述:TODO <br>
* 创建时间:2018年5月24日 下午1:29:41 <br>
* 版本信息:V1.0
* @创建人:Zhou Kailun
*/
package edu.fjnu.training.action;
import java.io.File;
import java.io.FileInputStream;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import edu.fjnu.training.domain.Clazz;
import edu.fjnu.training.domain.Student;
import edu.fjnu.training.service.ClazzService;
import edu.fjnu.training.service.ClazzServiceImpl;
import edu.fjnu.training.service.StudentQueryHelper;
import edu.fjnu.training.service.StudentService;
import edu.fjnu.training.service.StudentServiceImpl;
/**
* 类名:StudentAction <br>
* 功能描述: <br>
* 创建日期:2018年5月24日 下午1:29:41 <br>
* 修改备注:
* @作者信息:Zhou kailun <br>
*/
public class StudentAction extends BaseAction {
/**学生信息对象*/
private Student stu;
/**学生信息列表*/
private List<Student> stuList;
/**班级列表*/
private List<Clazz> clazzList;
/**查询辅助对象*/
private StudentQueryHelper helper;
/**上传图片名字:与jsp请求网页名字相同,后面两条属性必须一样写入stuPicFilenName,stuPicContentType */
private File stuPic;
private String stuPicFileName;
private String stuPicContentType;
/**<p>构造函数:</p><br><br>
* <p>描述:</p><br>
*/
public StudentAction() {
// TODO Auto-generated constructor stub
}
public String toReg()throws Exception{
ClazzService clazzService=new ClazzServiceImpl();
clazzList=clazzService.loadClazzList();
stu=new Student();
stu.setStuSex("m");
stu.setStuHobbies(new String[]{"rn"});
return "reg_page";
}
public String reg()throws Exception{
//从File中获得图片的二进制数据,如果图片为空,会抛出异常
if(stuPic!=null){
FileInputStream fis=new FileInputStream(stuPic);
byte[]picData=new byte[fis.available()];
fis.read(picData);
stu.setStuPic(picData);
fis.close();
}
StudentService studentService=new StudentServiceImpl();
studentService.addStudent(stu);
return "loadAllAct";
}
public String loadStudents()throws Exception{
StudentService studentService=new StudentServiceImpl();
stuList=studentService.loadAllStudent();
ClazzService clazzService=new ClazzServiceImpl();
clazzList=clazzService.loadClazzList();
return "list_page";
}
//remove?stu.stuNo=s001
public String remove()throws Exception{
StudentService studentService=new StudentServiceImpl();
studentService.removeStudent(stu.getStuNo());
return "loadAllAct";
}
//remove?stu.stuNo=s001
/**
* 方法名:预更新操作 <br>
* 功能描述: <br>
* @return :
* @throws:
* @see :
*/
public String preUpdate()throws Exception{
ClazzService clazzService=new ClazzServiceImpl();
clazzList=clazzService.loadClazzList();
StudentService studentService=new StudentServiceImpl();
stu=studentService.getStudentByStuNo(stu.getStuNo());
return "update_page";
}
public String update()throws Exception{
//从File中获得图片的二进制数据
if(stuPic!=null){
FileInputStream fis=new FileInputStream(stuPic);
byte[]picData=new byte[fis.available()];
fis.read(picData);
stu.setStuPic(picData);
fis.close();
}
StudentService studentService=new StudentServiceImpl();
studentService.updateStudent(stu);
return "loadAllAct";
}
//loadPic?stu.stuNo=s001
public String loadPic()throws Exception{
StudentService stuService=new StudentServiceImpl();
byte[] picData=stuService.loadStuPicByNo(stu.getStuNo());
HttpServletResponse response=ServletActionContext.getResponse();
response.setContentType("image/jpeg");
response.getOutputStream().write(picData);
response.getOutputStream().flush();
response.getOutputStream().close();;
return null;
}
public Student getStu() {
return stu;
}
public void setStu(Student stu) {
this.stu = stu;
}
public File getStuPic() {
return stuPic;
}
public void setStuPic(File stuPic) {
this.stuPic = stuPic;
}
public String getStuPicFileName() {
return stuPicFileName;
}
public void setStuPicFileName(String stuPicFileName) {
this.stuPicFileName = stuPicFileName;
}
public String getStuPicContentType() {
return stuPicContentType;
}
public void setStuPicContentType(String stuPicContentType) {
this.stuPicContentType = stuPicContentType;
}
public List<Student> getStuList() {
return stuList;
}
public void setStuList(List<Student> stuList) {
this.stuList = stuList;
}
public List<Clazz> getClazzList() {
return clazzList;
}
public void setClazzList(List<Clazz> clazzList) {
this.clazzList = clazzList;
}
public StudentQueryHelper getHelper() {
return helper;
}
public void setHelper(StudentQueryHelper helper) {
this.helper = helper;
}
}
ClazzAction.java
/**
* @Title: ClazzAction.java
* @package: edu.fjnu.training.action
* @author: Zhou kailun
* @date: 2018年5月30日 下午9:28:50
* @version: V1.0
*/
package edu.fjnu.training.action;
import java.util.List;
import edu.fjnu.training.domain.Clazz;
import edu.fjnu.training.service.ClazzService;
import edu.fjnu.training.service.ClazzServiceImpl;
/**
* ClassName: ClazzAction
* Description: TODO
* Author: Zhou kailun
*
*/
public class ClazzAction extends BaseAction {
/**班级信息列表*/
private List<Clazz> clazzList=null;
public String loadClazzList()throws Exception{
ClazzService clazzService=new ClazzServiceImpl();
clazzList=clazzService.loadClazzList();
return "list_page";
}
/**
* <p>Title: </p>
* <p>Description: </p>
*/
public ClazzAction() {
// TODO Auto-generated constructor stub
}
public List<Clazz> getClazzList() {
return clazzList;
}
public void setClazzList(List<Clazz> clazzList) {
this.clazzList = clazzList;
}
}
struts-clazz.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 教师信息管理 -->
<package name="clazzPkg" namespace="/clazz" extends="smsPkg">
<action name="*" class="edu.fjnu.training.action.ClazzAction" method="{1}">
<result name="list_page">../jsps/clazz/list_clazz.jsp</result>
</action>
</package>
</struts>
struts-student.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 学生信息管理 -->
<package name="stuPkg" namespace="/student" extends="smsPkg">
<!--
<action name="toReg" class="edu.fjnu.training.action.StudentAction" method="toReg">
<result name="reg_page" type="dispatcher">../jsps/student/reg_student.jsp</result>
</action>
<action name="work" class="edu.fjnu.training.action.StudentAction" method="work">
</action>
<action name="reg" class="edu.fjnu.training.action.StudentAction" method="reg">
<result name="loadAllAct" type="redirectAction">loadAll</result>
</action>
<action name="loadAll" class="edu.fjnu.training.action.StudentAction" method="loadAll">
<result name="list_page" >../jsps/student/list_student.jsp</result>
</action>
<action name="remove" class="edu.fjnu.training.action.StudentAction" method="remove">
<result name="loadAllAct" type="redirectAction">loadAll</result>
</action>
<action name="preUpdate" class="edu.fjnu.training.action.StudentAction" method="preUpdate">
<result name="update_page">../jsps/student/update_student.jsp</result>
</action>
<action name="update" class="edu.fjnu.training.action.StudentAction" method="update">
<result name="loadAllAct" type="redirectAction">loadAll</result>
</action>
<action name="loadPic" class="edu.fjnu.training.action.StudentAction" method="loadPic">
</action>
-->
<action name="*" class="edu.fjnu.training.action.StudentAction" method="{1}">
<result name="reg_page" type="dispatcher">../jsps/student/reg_student.jsp</result>
<result name="list_page" >../jsps/student/list_student.jsp</result>
<result name="update_page">../jsps/student/update_student.jsp</result>
<result name="loadAllAct" type="redirectAction">loadStudents</result>
</action>
</package>
</struts>
然后就是对jsp页面进行的一些更改:
reg_student.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ include file="/jsps/common-tags.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'reg_student.jsp' starting page</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="../../../css/style.css"> --%>
<%-- <link rel="stylesheet" type="text/css" href="/sms/css/style.css"> --%>
<%-- <link rel="stylesheet" type="text/css" href="<%=basePath%>/css/style.css">--%>
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/style.css"/>">
<script type="text/javascript"
src="<c:url value="/js/common.js"></c:url>"></script>
</head>
<body>
<h3>新生登记(2018年5月22日08:02:55)</h3>
<s:form action="reg" namespace="/student" method="post" enctype="multipart/form-data">
<img
id="stuPhoto" style="float:right;" alt="学生图片"
src="<c:url value="/pics/default.jpg"/>" width="160px" height="160px" />
<!-- 学生信息 学号: -->
<div>
<label>学号:</label>
<s:textfield name="stu.stuNo"></s:textfield>
</div>
<!-- 学生信息 密码: -->
<div>
<label>姓名:</label>
<s:textfield name="stu.stuName"></s:textfield>
</div>
<div>
<label>班级:</label>
<s:select name="stu.clazz.clazzNo" list="clazzList" listKey="clazzNo" listValue="clazzName" headerKey="0" headerValue="--请选择--">
</s:select>
</div>
<div>
<label>相片:</label>
<s:file name="stuPic" οnchange="$('stuPhoto').src=this.value"></s:file>
</div>
<div>
<label>成绩:</label>
<s:textfield name="stu.stuMark"></s:textfield>
</div>
<div>
<label>性别:</label>
<!--
<s:radio name="stu.stuSex" list="#{'ma':'男','fe':'女'}"></s:radio>
-->
<s:radio name="stu.stuSex" list="#{\"m\":'男',\"f\":'女'}"></s:radio>
</div>
<div>
<label>爱好:</label>
<s:checkboxlist name="stu.stuHobbies" list="#{'cm':'爬山','rd':'阅读','sw':'游泳','rn':'跑步'}"></s:checkboxlist>
</div>
<div>
<label>籍贯:</label>
<s:select name="stu.stuOrigin" list="#{'xm':'厦门','fz':'福州','nd':'宁德','pt':'莆田'}"></s:select>
</div>
<div>
<label>备注:</label>
<s:textarea name="stu.stuMemo" rows="6" cols="60" ></s:textarea>
</div>
<div>
<s:submit value="注册登记"/>
</div>
</s:form>
<a href="<c:url value="/smsMgr" />?act=main">首页</a>
<%-- <jsp:include page="../../css/footer.jsp"></jsp:include>--%>
</body>
</html>
list_student.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
isELIgnored="false"%>
<%@ include file="/jsps/common-tags.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>学生列表</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="styles.css">
-->
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/style.css"/>">
<style>
</style>
<script>
function removeStudent(stuNo,stuName){
if(confirm("您确定要删除(学号:"+stuNo+" 姓名:"+stuName+")的学生信息吗?"))
{
location.href="<s:url action="remove" namespace="/student"></s:url>?stu.stuNo="+stuNo;
}
}
//修改学生信息
function updateStudent(stuNo){
location.href="<s:url action="preUpdate" namespace="/student"></s:url>?stu.stuNo="+stuNo;
}
</script>
</head>
<body>
<h3>学生列表</h3>
<s:form action="loadStudents" namespace="/student" method="post">
<label>姓名:</label><s:textfield name="helper.qryStuNo" size="4"></s:textfield>
<label>姓名:</label><s:textfield name="helper.qryStuName" size="4"></s:textfield>
<label>班级:</label><s:select name="helper.qryClazzNo" list="clazzList" listKey="clazzNo" listValue="clazzName" headerKey="0" headerValue="-请选择-"></s:select>
<label>成绩范围:</label><s:textfield name="helper.qryMinStuMark" size="3"></s:textfield> - <s:textfield name="helper.qryMaxStuMark" size="3"></s:textfield>
<label>性别:</label><s:select name="helper.qryStuSex" list="#{'':'-请选择','m':'男','f':'女' }"></s:select>
<label>籍贯:</label><s:select name="helper.qryStuOrigin" list="#{'':'请选择','xm':'厦门','fz':'福州','nd':'宁德','pt':'莆田' }"></s:select>
<s:submit value="查询"></s:submit>
</s:form>
<table border="1" cellspacing="0" cellpadding="3px">
<caption>学生信息列表</caption>
<thead>
<tr>
<th>序号</th>
<th>学号</th>
<th>姓名</th>
<th>班级</th>
<th>成绩</th>
<th>性别</th>
<th>爱好</th>
<th>籍贯</th>
<th>备注</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<s:iterator var="stu" value="stuList">
<tr>
<td>0</td>
<td>
<s:property value="#stu.stuNo" />
</td>
<td>
<img alt="学生照片" width="100px" height="80px"
src="<s:url action="loadPic" namespace="/student"></s:url>?stu.stuNo=<s:property value="#stu.stuNo"/>">
<br>
<s:property value="#stu.stuName" />
</td>
<td>
<s:property value="#stu.clazz.clazzName"/>
</td>
<td>
<s:property value="#stu.stuMark" />
</td>
<td>
<s:if test="#stu.stuSex==\"m\"">男</s:if>
<s:elseif test="#stu.stuSex==\"f\"">女</s:elseif>
<s:else>请完善信息</s:else>
</td>
<td>
<s:iterator var="hobby" value="#stu.stuHobbies">
<s:if test="#hobby=='rd'">阅读</s:if>
<s:elseif test="#hobby=='rn'">跑步</s:elseif>
<s:elseif test="#hobby=='cm'">爬山</s:elseif>
<s:elseif test="#hobby=='sw'">游泳</s:elseif>
<s:else>无</s:else>
</s:iterator>
</td>
<td>
<s:if test="#stu.stuOrigin=='fz'">福州</s:if>
<s:elseif test="#stu.stuOrigin=='xm'">厦门</s:elseif>
<s:elseif test="#stu.stuOrigin=='nd'">宁德</s:elseif>
<s:elseif test="#stu.stuOrigin=='pt'">莆田</s:elseif>
<s:else>请完善信息</s:else></td>
<td>
<s:property value="#stu.stuMemo" />
</td>
<td>
<button οnclick="updateStudent('<s:property value="#stu.stuNo"/>');">修改</button>
<button οnclick="removeStudent('<s:property value="#stu.stuNo"/>','<s:property value="#stu.stuName"/>');">删除</button>
</td>
</tr>
</s:iterator>
</tbody>
</table>
<hr>
<a href="<c:url value="/smsMgr" />?act=main">首页</a>
</body>
</html>
update_student.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false" %>
<%@ include file="/jsps/common-tags.jsp" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>学生信息修改</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="../../../css/style.css"> --%>
<%-- <link rel="stylesheet" type="text/css" href="/sms/css/style.css"> --%>
<%-- <link rel="stylesheet" type="text/css" href="<%=basePath%>/css/style.css">--%>
<link rel="stylesheet" type="text/css" href="<c:url value="/css/style.css"/>">
<script type="text/javascript" src="<c:url value="/js/common.js"></c:url>"></script>
</head>
<body>
<h3>学生信息修改:<s:property value="stu.stuName"/></h3>
<s:form action="update" namespace="/student" method="post" enctype="multipart/form-data">
<img id="stuPhoto" style="float:right;" alt="学生图片"
src="<s:url action="loadPic" namespace="/student"></s:url>?stu.stuNo=<s:property value="stu.stuNo"/>" width="160px" height="160px" />
<!-- 学生信息 学号: -->
<div>
<label>学号:</label><s:property value="stu.stuNo"/>
<s:hidden name="stu.stuNo"></s:hidden>
<!-- <s:textfield name="stu.stuNo" hidden="hidden"></s:textfield>-->
</div>
<!-- 学生信息 密码: -->
<div>
<label>姓名:</label>
<s:textfield name="stu.stuName"></s:textfield>
</div>
<div>
<label>班级:</label>
<s:select name="stu.clazz.clazzNo" list="clazzList" headerKey="0" headerValue="--请选择--" listKey="clazzNo" listValue="clazzName"></s:select>
</div>
<div>
<label>相片:</label>
<s:file name="stuPic" οnchange="$('stuPhoto').src=this.value"></s:file>
</div>
<div>
<label>成绩:</label>
<s:textfield name="stu.stuMark"></s:textfield>
</div>
<div>
<label>性别:</label>
<!--
<s:radio name="stu.stuSex" list="#{'ma':'男','fe':'女'}"></s:radio>
-->
<s:radio name="stu.stuSex" list="#{\"m\":'男',\"f\":'女'}"></s:radio>
</div>
<div>
<label>爱好:</label>
<s:checkboxlist name="stu.stuHobbies" list="#{'cm':'爬山','rd':'阅读','sw':'游泳','rn':'跑步'}"></s:checkboxlist>
</div>
<div>
<label>籍贯:</label>
<s:select name="stu.stuOrigin" list="#{'xm':'厦门','fz':'福州','nd':'宁德','pt':'莆田'}"></s:select>
</div>
<div>
<label>备注:</label>
<s:textarea name="stu.stuMemo" rows="6" cols="60" ></s:textarea>
</div>
<div>
<s:submit value="学生信息修改"/>
</div>
</s:form>
<a href="<c:url value="/smsMgr" />?act=main">首页</a>
<%-- <jsp:include page="../../css/footer.jsp"></jsp:include>--%>
</body>
</html>
list_clazz.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
isELIgnored="false"%>
<%@ include file="/jsps/common-tags.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>班级列表</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="styles.css">
-->
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/style.css"/>">
<style>
</style>
<script>
</script>
</head>
<body>
<h3>班级列表</h3>
<table border="1" cellspacing="0" cellpadding="3px">
<caption>班级信息列表</caption>
<thead>
<tr>
<th>班级编号</th>
<th>名称</th>
<th>学生人数</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<s:iterator var="clazz" value="clazzList">
<tr>
<td>
<s:property value="#clazz.clazzNo"/>
</td>
<td>
<s:property value="clazzName"/>
</td>
<td>
<s:property value="#clazz.stuCnt"/>
</td>
<td>
<button οnclick="">修改</button>
<button οnclick="">删除</button>
</td>
</tr>
</s:iterator>
</tbody>
</table>
<hr>
<a href="<c:url value="/smsMgr" />?act=main">首页</a>
</body>
</html>
程序中初步讲解了条件组合查询,还没看完,就先贴一段代码:
StudentQueryHelper.java
/**
* @Title: StudentWQuryHelper.java
* @package: edu.fjnu.training.service
* @author: Zhou kailun
* @date: 2018年5月30日 下午11:14:27
* @version: V1.0
*/
package edu.fjnu.training.service;
import edu.fjnu.training.domain.ValueObject;
/**
* ClassName: StudentWQuryHelper 查询辅助类
* Description: TODO
* Author: Zhou kailun
*
*/
public class StudentQueryHelper extends ValueObject {
/**学号 精确查询*/
private String qryStuNo;
/**姓名 模糊查询*/
private String qryStuName;
/**班级精确查询*/
private Integer qryClazzNo;
/**成绩范围查询 最小*/
private double qryMinStuMark;
/**成绩范围查询 最大*/
private double qryMaxStuMark;
/**性别查询*/
private String qryStuSex;
/**籍贯查询*/
private String qryStuOrigin;
/**
* <p>Title: </p>
* <p>Description: </p>
*/
public StudentQueryHelper() {
// TODO Auto-generated constructor stub
}
public String getQryStuNo() {
return qryStuNo;
}
public void setQryStuNo(String qryStuNo) {
this.qryStuNo = qryStuNo;
}
public String getQryStuName() {
return qryStuName;
}
public void setQryStuName(String qryStuName) {
this.qryStuName = qryStuName;
}
public Integer getQryClazzNo() {
return qryClazzNo;
}
public void setQryClazzNo(Integer qryClazzNo) {
this.qryClazzNo = qryClazzNo;
}
public double getQryMinStuMark() {
return qryMinStuMark;
}
public void setQryMinStuMark(double qryMinStuMark) {
this.qryMinStuMark = qryMinStuMark;
}
public double getQryMaxStuMark() {
return qryMaxStuMark;
}
public void setQryMaxStuMark(double qryMaxStuMark) {
this.qryMaxStuMark = qryMaxStuMark;
}
public String getQryStuSex() {
return qryStuSex;
}
public void setQryStuSex(String qryStuSex) {
this.qryStuSex = qryStuSex;
}
public String getQryStuOrigin() {
return qryStuOrigin;
}
public void setQryStuOrigin(String qryStuOrigin) {
this.qryStuOrigin = qryStuOrigin;
}
}