8.demo

在这里插入图片描述

员工列表展示
访问index.jsp—发送/emps请求
------控制器查询所有员工----数据放在请求域中------转发到list页面展示

员工添加:
在list页面点击“员工添加”-----发送/toAddPage请求
-----控制器查询所有部门信息----数据放在请求域中-----转发到add页面展示

-----访问add.jsp-----输入员工数据-----保存------发送action="${ctp}/emp"请求 请求方式method=“POST”
------控制器收到请求,参数为实体类对象—调用employeeDao.save(employee);------重定向到查询所有员工的请求—转发到list页面展示

修改员工
在这里插入图片描述

页面怎么知道修改哪个员工,
因为请求域已经有完整的对象了,直接取就可以。${}

<c:forEach items="${emps}" var="emp">
       <tr>
        <th>${emp.id}</th>
        <th>${emp.lastName}</th>
        <th>${emp.email}<th>
        <th>${emp.gender==0?"女":"男"}</th>
        <th>${emp.department.departmentName}</th>
         <th>
         
         <a href="${ctp}/emp/${emp.id}" >Update</a></th>
         <th>Delete</th>
    </tr>
    </c:forEach>
<h1>员工修改</h1>
     <% pageContext.setAttribute("ctp",request.getContextPath());%> 
      
      <form:form  action="${ctp}/emp/${employee.id}" 
      modelAttribute="employee" method="post">
       <input type="hidden" name="_method" value="put"/>  
      id用隐藏域,因为请求域已经有完整的对象了,直接取就可以。
       <input type="hidden" name="id" value="${employee.id}">    
       email:<form:input   path="email"/><br/>
       gender::<form:radiobutton path="gender" value="1"/><br/>: <form:radiobutton path="gender" value="0"/><br/>
        dept:
                <form:select path="department.id" 
                items="${depts}" itemLabel="departmentName" itemValue="id">
                </form:select>
        <input type="submit" value="修改"/>      
      
      </form:form>

1.ModelAttribute可以提前运行在更新保存方法前面,获取到employee对象

不能用PathVariable注解获取请求的占位符id,因为第一次发的请求是(/emps)
要用@RequestParam获取请求参数中id的值 ,这个请求参数可以不带id。

1.获取到employee对象的id
2.调用Dao接口方法查询员工信息,返回employee对象
ModelAttribute可以把employee对象放到隐含模型中,
控制器另外一个方法从隐含模型中取出就可以了。

 @RequestMapping(value="/emp/{id}",method=RequestMethod.PUT)
   Employee对象不可以直接用,不能让SpringMVC创建一个新的对象,
   有的字段为null
    public String updateEmp(Employee employee){
	System.out.println(employee);
	 employeeDao.save(employee);
  返回列表页面;可以直接重定向到查询所有员工的请求
	return"redirect:/emps";
}
   @ModelAttribute
    public void myModelAttribute(
    		@RequestParam(value="id",required=false)Integer id,Model model){
             if(id!=null){
            	 Employee employee=employeeDao.get(id);
            	 model.addAttribute("employee", employee);
             }
   }

在这里插入图片描述

引入表单标签库

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

path
1.可以当作原生的name
2.自动回显隐含模型的某个对象的这个属性的值

value是要提交的值,name=属性,可以写级联属性

items指定要遍历的集合,自动遍历,遍历出的每一个元素是一个deptment对象
itemLable属性,指定遍历出的这个的对象的哪个属性是作为option的值
itemValue属性,指定遍历出的这个的对象的哪个属性是作为提交的value值
  <% pageContext.setAttribute("ctp",request.getContextPath());%> 
      
      <form:form  action="${ctp}/emp" modelAttribute="employee" method="POST">
       lastName:<form:input path="lastName"/><br/>
       email:<form:input   path="email"/><br/>
       gender: <br/>:<form:radiobutton path="gender" value="1"/><br/>: <form:radiobutton path="gender" value="0"/><br/>
        dept:
                <form:select path="department.id" 
                items="${depts}" itemLabel="departmentName" itemValue="id">
                </form:select>
        <input type="submit" value="保存"/>      
      
      </form:form>

用了表单标签的页面可能会报这个错误,请求域中没有一个command类型的对象

SpringMVC认为,每一项表单数据最终都是要回显的
path指定的是一个属性,这个属性是从隐含模型/请求域中取出的某个对象中的属性
请求域中必须有一个对象,拥有这个属性
这个对象就是请求域中的command;

以前我们表单标签会在请求域中取出一个command对象,
把command对象中的每一个属性对应的显示出来。

让SpringMVC不要去取走command对象了,
因为放了一个modelAttribute指定的对象

request.getContextPath()
是在开发Web项目时, 经常用到的方法,是为了解决相对路径的问题,可返回站点的根路径。
比如:要生成一个文件放在服务器上的一个目录下,
可以使用request.getContextPath()+/dir,组成一个完整得目录结构!

Servlet作用域从小到大是这样排列的,

page只是作用于当前请求的页面
request一次请求,根据HTTP无状态,所以可以知道每一次请求,对象是不同的。
session一次会话,比如有些网站需要登录后才能查看资源,从登录到你关闭浏览器后,这就是一次会话,session是存在服务端的。还有一种情况,有时你在一个网页上长时间没操作,再操作会让你重新登录,这也是session的问题,服务器那边设置了session失效的时间。
pageContext在整个Web应用上都是有效的,可以理解为所有的网页,因为这个对象是常常用来共享资源的,也就是用户1提交了一个资源,放到了pageContext作用域中,其它用户也可以看到这个资源。

引用jquery文件(静态资源)

a标签提交的话,就是页面发送get请求
form表单提交的话,就是页面可以发delete请求

点击a链接的时候,给a链接一个class,给他绑定一个单击事件。(.click())
1.点击后,a链接进入默认行为,不发生跳转。(return false;)

2.form表单的action属性变为一模一样的。attr改form表单的action属性

3.提交form表单。(.submit)

<script type="text/javascript">
        $(function(){
              $(".delBtn").click(function(){
       $("#delectForm").attr("action",this.href).submit();
                           return false;
                      });
        })
       
        </script>

1.引入脚本script标签,src脚本地址
在这里插入图片描述
function(){ } 声明一个回调函数

jquery文件被前端控制器拦截了。
此时会拦截静态资源,到控制器中没有匹配路径为处理静态资源的方法。

js请求怎么交给tomcat处理?

<mvc:default-servlet-handler/>

自己映射的请求(RequestMapping),自己处理
不能处理的请求交给tomcat处理

现在静态资源可以处理,动态映射的请求就不可以处理

所以要加上

<mvc:annotation-driven></mvc:annotation-driven>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值