package org.action;
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.dao.XsDao;
import org.dao.ZyDao;
import org.dao.imp.KcDaoImp;
import org.dao.imp.XsDaoImp;
import org.dao.imp.ZyDaoImp;
import org.model.Dlb;
import org.model.Kcb;
import org.model.Xsb;
import org.model.Zyb;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class XsAction extends ActionSupport{
XsDao xsDao;
//定义学生对象
private Xsb xs;
//定义课程对象
private Kcb kcb;
//定义专业对象
private Zyb zyb;
//生成其 getter 和 setter 方法
public Kcb getKcb () {
return kcb;
}
public void setKcb(Kcb kcb) {
this.kcb=kcb;
}
public Zyb getZyb() {
return zyb;
}
public void setZyb(Zyb zyb) {
this.zyb=zyb;
}
public Xsb getXs(){
return xs;
}
public void setXs(Xsb xs){
this.xs=xs;
}
//默认情况下,用该方法获得当前学生的个人信息
public String execute() throws Exception {
//获得 session 对象
Map session=(Map)ActionContext.getContext().getSession();
//从 Session 中取出当前用户
Dlb user=(Dlb)session.get("user");
//创建 XsDao 接口对象
xsDao=new XsDaoImp();
//根据登录学号得到该学生信息
Xsb xs=xsDao.getOneXs(user.getXh());
Map request=(Map)ActionContext.getContext().get("request");
//保存
request.put("xs",xs);
return SUCCESS;
}
//进入修改学生信息页面
public String updateXsInfo() throws Exception{
//获取当前用户对象
Map session=(Map)ActionContext.getContext().getSession();
Dlb user=(Dlb)session.get("user");
xsDao=new XsDaoImp();
ZyDao zyDao=new ZyDaoImp();
//取出所有专业信息,因为在修改学生信息时,专业栏是下拉列表//选择专业,而不是学生自己随便填写
List zys=zyDao.getAll();
//得到当前学生的信息
Xsb xs=xsDao.getOneXs(user.getXh());
Map request=(Map)ActionContext.getContext().get("request");
request.put("zys",zys) ;
request.put("xs", xs);
return SUCCESS;
}
//修改学生信息
public String updateXs() throws Exception{
xsDao=new XsDaoImp();
ZyDao zyDao=new ZyDaoImp();
//创建一个学生对象,用于存放要修改的学生信息
Xsb stu=new Xsb();
//设置学生学号
stu.setXh(xs.getXh());
//由于没有修改学生对应的选修的课程,所以直接取出不用改变
//Hibernate级联到第三张表,所以要设置
//如果不设置,则认为设置为空,会把连接表中有关内容删除
Set list=xsDao.getOneXs(xs.getXh()).getKcs();
//设置学生对应多项课程的 Set
stu.setKcs(list);
//设置用户填写的姓名
stu.setXm(xs.getXm());
//性别
stu.setXb(xs.getXb());
//出生时间
stu.setCssj(xs.getCssj());
//总学分
stu.setZxf(xs.getZxf());
//备注
stu.setBz(xs.getBz());
Zyb zy=zyDao.getOneZy(zyb.getId());
//专业,这里要设置对象,所以下拉列表中传值是要传专业的ID
stu.setZyb(zy);
//修改
xsDao.update(stu);
return SUCCESS;
}
public String getXsKcs() throws Exception{
Map session=(Map)ActionContext.getContext().getSession();
Dlb user=(Dlb)session.get("user");
String xh=user.getXh();
//得到当前学生的信息
Xsb xsb=new XsDaoImp().getOneXs(xh);
//取出选修的课程 Set
Set list=xsb.getKcs();
Map request=(Map)ActionContext.getContext().get("request");
//保存
request.put("list",list);
return SUCCESS;
}
//退选课程
public String deleteKc() throws Exception{
Map session=(Map)ActionContext.getContext().getSession();
String xh=((Dlb)session.get("user")).getXh();
xsDao=new XsDaoImp();
Xsb xs2=xsDao.getOneXs(xh);
Set list=xs2.getKcs();
Iterator iter=list.iterator();
//取出所有选择的课程进行迭代
while(iter.hasNext()){
Kcb kc2=(Kcb)iter.next();
//如果遍历到退选的课程的课程号就从 list 中删除
if(kc2.getKch().equals(kcb.getKch())){
iter.remove ();
}
}
//设置课程的 Set
xs2.setKcs(list);
xsDao.update(xs2);
return SUCCESS;
}
}