这一张主要是在之前的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" onchange="$('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 onclick="updateStudent('<s:property value="#stu.stuNo"/>');">修改</button> <button onclick="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" onchange="$('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 onclick="">修改</button> <button onclick="">删除</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; } }