日期:2014-05-17  浏览次数:20682 次

spring mvc redirect问题。
提交方法:

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public String save(@ModelAttribute("user") @Valid User user,@RequestParam(value = "nameSearch", required = false) String nameSearch){
        if(user.getId() != null && !user.getId().equals("")){
            User userTemp = userService.get(user.getId());
            userTemp.setName(user.getName());
            userTemp.setPassword(user.getPassword());
            userTemp.setEmail(user.getEmail());
            userService.saveOrUpdate(userTemp);
        }else{
            userService.saveOrUpdate(user);
        }
        return "redirect:/user?nameSearch=" + nameSearch;


提交后列表显示方法:

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView list(@RequestParam(value = "pageNo", required = false) Integer pageNo,@RequestParam(value = "nameSearch", required = false) String nameSearch){
        ModelAndView view = new ModelAndView();
        pageNo = pageNo==null?1:pageNo;
        nameSearch = nameSearch==null?"":nameSearch;
        Page page = userService.queryUserPageByCriteria(pageNo, 10, nameSearch);
        view.addObject("page", page);
        view.addObject("nameSearch",nameSearch);
        view.setViewName("user/index");
        return view;
    }


这里提交时"redirect:/user?nameSearch=" + nameSearch,有个nameSearch的参数需要提交传到list显示方法里面,
但是如果nameSearch是英文或者数字没有问题,但如果是中文 nameSearch接收到的就是空字符串。
为什么呢?怎么解决?


------解决方案--------------------
解决了吗,我也遇到了这个问题,一直没找到原因
------解决方案--------------------
URL本来就不能直接用中文参数。

改一下。


save方法返回前加一句。
改成:nameSearch = URLEncoder.encode(nameSearch);
      return "redirect:/user?nameSearch=" + nameSearch;


然后list方法里面也加一句。
     nameSearch = URLDecoder.decode(nameSearch);