在一个请求中发生这个现象:
有个session值"yh",这是个对象,里面有个属性名是"xh",这个请求中有个参数名也为"xh",请求提交后"yh"的"xh"属性值变成了请求参数"xh"的值。可我在一开始用户登录建立session值"yh"后就从未修改过"yh"的值啊!怪了!我将"yh"中新建了一个属性"yhh"保存与"xh"同样的值,这回"xh"值照旧被改了,但"yhh"值没有被改。
这是怎么回事呢?spring

解决方案 »

  1.   

    同时有session和request参数的view和del方法都出现了这个问题,只有session参数的post方法未出现该问题:
    @Controller
    @SessionAttributes("yh")
    @RequestMapping("/wj")
    public class WjController extends TyController {
        private static Logger logger = Logger.getLogger(WjController.class);
        
        @Autowired
        private WjService wjService;
        
        @RequestMapping("/index")
        public String indexPage() {
            return "wj/index";
        }    @ModelAttribute("WjPostForm")
        public WjPostForm createFormBean() {
            return new WjPostForm();
        }    @RequestMapping("/list")
        public ModelAndView listPage(@RequestParam(value="yehao",defaultValue="1") int yehao, @ModelAttribute("yh") Yh yh, HttpServletRequest req) {
            ModelAndView mav = new ModelAndView();
            String ip = req.getRemoteAddr();        checkResult cr = wjService.isView(yh.getXh());
            if (cr.isPass()) {
                mav.setViewName("wj/list");
                mav.addObject("pageData", wjService.getPage(yehao));
                wjService.Log(DB.RIZHI_LX_List, true, null, yh.getXh(), ip);
            } else {
                mav.addObject("message", cr.getErrMessage());
                mav.setViewName("refuse");
                wjService.Log(DB.RIZHI_LX_List, false, cr.getErrMessage(), yh.getXh(), ip); //未登录的用户号自动为0
            }
            logger.info("list结尾。yhh=" + yh.getXh());
            return mav;
        }
        @RequestMapping(value="/view", params="xh")//params={"xh"}
        public ModelAndView getView(@ModelAttribute("yh") Yh yh, HttpServletRequest req,
                                        @RequestParam("xh") int xh, @RequestParam(value="yehao",defaultValue="1") int yehao,
                                        @RequestParam(value="ly", defaultValue="list") String pageName) {
            logger.info("view开始。[Yh]xh=" + yh.getXh() + "yhm=" + yh.getXsm() + ";yhh=" + yh.getYhh());
            yh.setXh(yh.getYhh());  //xh被同名request参数替换,用备用值恢复
            ModelAndView mav = new ModelAndView();
            String ip = req.getRemoteAddr();
            checkResult cr = wjService.isView(yh.getXh());
            if (cr.isPass()) {
                mav.setViewName("wj/view");
                WjxxResult wr = wjService.getOne(xh);
                mav.addObject("WjxxResult", wr);
                wjService.Log(DB.RIZHI_LX_View, true, "[" + xh + "]" + wr.getBt(), xh, ip);
                
                if ("search".equals(pageName)) {
                    pageName = "searchWj";
                }
                logger.info("页名:" + pageName);
                mav.addObject("pageName", pageName);
            } else {
                mav.addObject("message", cr.getErrMessage());
                mav.setViewName("refuse");
                wjService.Log(DB.RIZHI_LX_View, false, cr.getErrMessage(), yh.getXh(), ip);
            }
            return mav;
        }
        @RequestMapping("wjPost")
        public ModelAndView post(@Valid @ModelAttribute("WjPostForm") WjPostForm form, BindingResult br,
                                    @ModelAttribute("yh") Yh yh, HttpServletRequest req) {
            ModelAndView mav = new ModelAndView();
            String ip = req.getRemoteAddr();
            int yhh = yh.getXh();
            if (!br.hasErrors()) {
                checkResult cr = wjService.isFb(yhh);            if (cr.isPass()) {
                    if (!wjService.checkUrl(form.getUrl())) {
                        int r = wjService.post(form, yhh);
                        if (r == 1) {   //发布成功
                            mav.setViewName("wj/list");
                            wjService.Log(DB.RIZHI_LX_Fb, true, form.getBt(), yhh, ip);
                        } else {
                            mav.addObject("message", "发布失败");
                            mav.setViewName(QjParams.ViewWrong);
                            wjService.Log(DB.RIZHI_LX_Fb, false, "发布失败", yhh, ip);
                        }
                    } else {
                        Object[] o = {"网址已存在  "};
                        br.rejectValue("url", "", o, "网址已存在");
                        mav.setViewName("wj/index");
                        wjService.Log(DB.RIZHI_LX_Fb, false, "网址已存在", yhh, ip);
                        return mav;
                    }
                } else {
                    mav.addObject("message", cr.getErrMessage());
                    mav.setViewName(QjParams.ViewRefuse);
                    if (cr.isLogin()) {
                        wjService.Log(DB.RIZHI_LX_Fb, false, cr.getErrMessage(), yhh, ip);
                    } else {
                        wjService.Log(DB.RIZHI_LX_Fb, false, cr.getErrMessage(), 0, ip);
                    }
                }
            } else {
                wjService.Log(DB.RIZHI_LX_Fb, false, "表单填写错误", yhh, ip);
                mav.setViewName("wj/index");
            }
            return mav;
        }
        @RequestMapping(value="/delWjxx", params={"xh", "yehao"})
        public ModelAndView del(@ModelAttribute("yh") Yh yh, HttpServletRequest req,
                                @RequestParam("xh") int xh, @RequestParam("yehao") int yehao) {
            ModelAndView mav = new ModelAndView();
            String ip = req.getRemoteAddr();
            yh.setXh(yh.getYhh());  //xh被同名request参数替换,用备用值恢复
            int yhh = yh.getXh();
            logger.info("yh.xh删除" + yhh);
            checkResult cr = wjService.isSc(yhh, xh);
            if (cr.isPass()) {
                int r = wjService.delWjxx(xh);
                if (r == 1) {
                    mav.setViewName("wj/list");
                    wjService.Log(DB.RIZHI_LX_Sc, true, String.valueOf(xh), yhh, ip);
                } else {
                    mav.addObject("message", "删除失败");
                    mav.setViewName(QjParams.ViewWrong);
                    wjService.Log(DB.RIZHI_LX_Fb, false, "删除xh=[" + xh + "]失败", yhh, ip);
                }
            } else {
                mav.addObject("message", cr.getErrMessage());
                mav.setViewName(QjParams.ViewRefuse);
                wjService.Log(DB.RIZHI_LX_Sc, false, cr.getErrMessage(), yhh, ip);
            }
            return mav;
        }
    }