SpringMVC学习(二)高级参数绑定,拦截器,controller方法返回值

一、高级参数绑定

1,数组类型的参数绑定

需求分析:
要求商品列表页面中的每个商品前有一个checkbook,选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id删除商品信息。

jsp中实现



<c:forEach items="${itemList}" var="item">
<tr>
   <td>${item.name}</td>
   <td>${item.price}</td>
   <td><fmt:formateDate value="${item.createtime}"
   pattern="yyyy-MM-dd HH:mm:ss"/></td>
   <td>${item.detail}</td>

<td>
    <a href="${pageContext.request.contextPath}
    /itemEdit.action?id=${item.id}">修改
    </a>
</td>

</tr>
</c:forEach>

Controller实现

Controller方法中可以用String[]接收,或者pojo的String[]属性接收。
两种方法任选其一即可。


方法一、

@RequestMapping("/queryitem")
public String queryItem(String[] ids) {

   System.out.println(ids.toString());
   return null;

}

方法二、

@RequestMapping("/queryitem")
    public String queryItem(QueryVo queryVo) {

    }

public class QueryVo{
    private String[]ids;
}



2,参数绑定到List

需求,实现商品数据的批量修改,需要在商品列表中可以对商品信息进行修改。

jsp页面



<c:forEach items="${itemList }" var="item" varStatus="status">
    <tr>
        <!--
        name的属性名称要与接收参数的pojo类的属性名称要一致
        -->
        <!--  
        如果批量删除,可以用List<pojo>来接收,
        页面上input框的name属性值=vo中接收的集合属性名称+List泛型类的属性名称
        -->

    <td><input type="checkbox" name="ids" value="${item.id }">
    <input type="hidden" name="listItem[${status.index}].id" value="${item.id }">
   </td>

  <td>
   <input type="text"     name="listItem[${status.index}].name" value="${item.name}">
   </td>

   <td><input type="text" name="listItem[${status.index}].price" value="${item.price }">
   </td>

    <td><input type="text"  name="listItem[${status.index}].createtime"
  value="<fmt:formatDate value="${item.createtime}"
pattern="yyyy-MM-dd HH:mm:ss" />">
   </td>

   <td><input type="text" name="listItem[${status.index}].detail" value="${item.detail }">
    </td>

   <td>
   <a href="${pageContext.request.contextPath }/items/itemEdit/${item.id}">修改</a>
   </td>

</tr>
</c:forEach>

Controller 代码


@RequestMapping("/queryitem")
    public String queryItem(QueryVo queryVo) {

    }

public class QueryVo{
    // 批量修改使用
    private List<Items> listItem;
}

注意:属性name必须是包装pojo的list属性+下标+元素属性

二、请求方法限定

1,限定GET方法


@RequestMapping(method = RequestMethod.GET)

2,限定Post方法


@RequestMapping(method = RequestMethod.POST)

3,GET和POST方法都可以


@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

三、controller方法返回值

1,返回值ModleAndView



@RequestMapping(value="/itemLists",method=RequestMethod.GET)
public ModelAndView getItemList() throws Exception {


    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("itemList", listItems);
    modelAndView.setViewName("itemList");

    return modelAndView;
}

2,返回void

在方法形参上定义request,response,使用request或response
指定响应结果

(1)使用request转向页面


//指定返回页面(如果controller返回值为void,
//则不走springMvc组件,所以要写页面的完整路径)
 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").
       forward(request, response);

(2)使用response重定向页面(传递不了数据)


response.sendRedirect("url")

3,返回字符串

(1)方法返回字符串可以指定视图名


// 如果springMvc方法返回一个简单的string字符串,
//那么springMvc就会认为这个字符串就是页面的名称
//即:/WEB-INF/jsp/item/editItem.jsp
 return "/item/editItem";

(2)Redirect重定向



//注意:"redirect:/items/itemEdit/"+items.getId();
//通过url重定向过去,url参数数据可以保持,通过域重定向url数据不保存
return "redirect:/items/itemEdit/"+items.getId();

(3)forward转发



//结果转发到editItem.action,request可以带过去
return "forward:editItem.action";

四、请求json,响应json实现

Springmvc默认用MappingJacksonHttpMessageConverter
对json数据进行转换,需要加入jackson的包

这里写图片描述

配置Json转换器

<mvc:annotation-driven /> 

五、拦截器(比如用于:用户登录)

SpirngMVC 的处理器类似Servlet过滤器用于对处理器
进行预处理和后处理

1,实现HandlerInterceptor接口




public class HandlerIntecepter2 implements HandlerInterceptor{
    /**
     * 返回boolean 如果返回true放行,返回false则被拦截
     * 执行时机,controller方法已经执行,ModleAndView已经返回
     * 使用场景,记录操作日志,记录用户登录的时间,日期等。
     */
    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {

    }
    /**
     * 返回boolean 如果返回true放行,返回false则被拦截
     * 执行时机,controller方法已经执行,ModleAndView没有被返回
     * 使用场景,可以在此方法中可以设置全局的的数据处理业务
     */
    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {

    }
    /**
     * 返回boolean 如果返回true放行,返回false则被拦截
     * 执行时机,controller方法没有被执行,ModleAndView没有被返回
     * 使用场景,权限验证
     */
    @Override
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
        return false;
    }

}



2,拦截器配置:

(1)针对某一种拦截器进行配置


<bean
    class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="handlerInterceptor1"/>
            <ref bean="handlerInterceptor2"/>
        </list>
    </property>
</bean>

<bean id="handlerInterceptor1" class="com.intercapter.HandlerInterceptor1"/>
<bean id="handlerInterceptor2" class="com.intercapter.HandlerInterceptor2"/>

(2), 针对所有mapping配置全局拦截器



<!--配置拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器的执行顺序,等于配置文件中配置的顺序 -->

    <mvc:interceptor>

        <!-- 拦截请求路径,要拦截所有路径 配置成/**代表所有 -->
        <mvc:mapping path="/**" />
        <!-- 指定拦截器位置 -->
        <bean class="cn.itheima.intecepter.HandlerIntecepter"></bean>
    </mvc:interceptor>

    <mvc:interceptor>
        <!-- 拦截请求路径,要拦截所有路径 配置成/**代表所有 -->
        <mvc:mapping path="/**" />
        <!-- 指定拦截器位置 -->
        <bean class="cn.itheima.intecepter.HandlerIntecepter2"></bean>
    </mvc:interceptor>
</mvc:interceptors>


六、代码

下载地址:http://download.csdn.net/detail/tianyejun6/9799611

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值