以登录为例。
1.若jsp是由form表单提交,
可以这样触发 ,不推荐:
表示form[0],第一个,,即上面的action,触发submit登录。
2.触发form的action,跳至struts.xml
找到对应的action类,,
3.进入对应的action类找到方法。此处为login
return什么就返回什么跳至那个struts.xml里面对应action中的 jsp
此处是封装了一个sessionContext,代码如下:
package cn.itcast.ssh.utils;
import org.apache.struts2.ServletActionContext;
import cn.itcast.ssh.domain.Employee;
public class SessionContext {
public static final String GLOBLE_USER_SESSION = "globle_user";
public static void setUser(Employee user){
if(user!=null){//设置session
ServletActionContext.getRequest().getSession().setAttribute(GLOBLE_USER_SESSION, user);
}else{ //重新登录时清空session
ServletActionContext.getRequest().getSession().removeAttribute(GLOBLE_USER_SESSION);
}
}
/**获取session*/
public static Employee get(){
return (Employee) ServletActionContext.getRequest().getSession().getAttribute(GLOBLE_USER_SESSION);
}
}
4.在action中会调用service至dao,
操作:
登录——* 从页面上获取用户名
* 使用用户名作为查询条件,查询数据库中对应的这个用户的用户对象
* 查询的对象(唯一)放置到Seesion中-----可以便于后面获取当前登录用户的信息
在ssm框架中,servlet一般写法是 request.getSession.setAttribute("CURRENT_USER",user)
在后台处理中,service以及dao层获取当前用户,从session中获取当前用户对象:SessionContext.get()
新增/修改——*获取请假单ID
*使用请假单ID,查询请假单信息
*将请假单信息放置栈顶,页面使用struts2的标签,支持表单回显
/**
* 请假管理首页显示
* @return
*/
public String home(){
//1:查询所有的请假信息(对应a_leavebill),返回List<LeaveBill>
List<LeaveBill> list = leaveBillService.findLeaveBillList();
//放置到上下文对象中
ValueContext.putValueContext("list", list);
return "home";
}
/**
* 添加请假申请
* @return
*/
public String input(){
//1:获取请假单ID
Long id = leaveBill.getId();
//修改
if(id!=null){
//2:使用请假单ID,查询请假单信息,
LeaveBill bill = leaveBillService.findLeaveBillById(id);
//3:将请假单信息放置到栈顶,页面使用struts2的标签,支持表单回显
ValueContext.putValueStack(bill);
}
//新增
return "input";
}
/**
* 保存/更新,请假申请
*
* */
public String save() {
//执行保存
leaveBillService.saveLeaveBill(leaveBill);
return "save";
}
/**
* 删除,请假申请
*
* */
public String delete(){
//1:获取请假单ID
Long id = leaveBill.getId();
//执行删除
leaveBillService.deleteLeaveBillById(id);
return "save";
}
放置栈顶是一个工具类ValueContext
public class ValueContext {
/**放置在Root栈中*/
public static void putValueContext(String key,Object value){
ActionContext.getContext().put(key, value);
}
/**压入栈顶*/
public static void putValueStack(Object o){
ServletActionContext.getContext().getValueStack().push(o);
}
}
新增/修改—提交,更新——*服务器端执行update操作,完后更新(重定向,,表单提交的时候加上隐藏域 hidden: id完成回显)
在hibernate中的更新与保存:
/**保存请假单*/
@Override
public void saveLeaveBill(LeaveBill leaveBill) {
this.getHibernateTemplate().save(leaveBill);
}
/**更新请假单*/
@Override
public void updateLeaveBill(LeaveBill leaveBill) {
this.getHibernateTemplate().update(leaveBill);
}
删除——hibernate中的删除是按对象删
*获取请假单ID
*使用请假单ID,查询请假单信息,获取对象LeaveBill
*执行删除
/**
* 删除,请假申请
*
* */
public String delete(){
//1:获取请假单ID
Long id = leaveBill.getId();
//执行删除
leaveBillService.deleteLeaveBillById(id);
return "save";
}
/**使用请假单ID,删除请假单*/
@Override
public void deleteLeaveBillById(Long id) {
leaveBillDao.deleteLeaveBillById(id);
}
/**使用请假单ID,删除请假单*/
@Override
public void deleteLeaveBillById(Long id) {
//2:使用请假单ID,查询请假单信息,获取对象LeaveBill
LeaveBill bill = this.findLeaveBillById(id);
//3:执行删除
this.getHibernateTemplate().delete(bill);
}