【问题标题】:Not able to update session values Spring无法更新会话值 Spring
【发布时间】:2014-05-13 04:12:05
【问题描述】:

我正在尝试在 Spring 会话中保存一些数据并更新我的数据,但它不起作用。我正在使用 ajax 向控制器发送数据,数据由控制器接收。我尝试了几个小时,但无法找出问题所在。这是我的控制器代码

@Controller
@RequestMapping("/pages/CreateQuestion")
@SessionAttributes({"question", "preview", "qparameters", "qhparameters"})
public class CreateQuestionController {

 @RequestMapping(value = "/SaveQuestion/two", method = RequestMethod.POST)
    public @ResponseBody
    ResponseObject saveQuestionTwo(HttpServletRequest request, HttpServletResponse res, ModelMap map) {
        ResponseObject obj = null;
        try {

            int auth = UserAuthentication.checkAuthentication();
            if (auth > 0) {
                String question = request.getParameter("question");
                String preview = request.getParameter("preview");
                String[] params = request.getParameterValues("params[]");
                String[] hparams = request.getParameterValues("hparams[]");
                if (question != null && question.length() > 5) {

                    QuestionStepOne one = (QuestionStepOne) map.get("one");

                    if (one.getParamiterised().equals("Yes")) {
                        if (params == null && hparams == null) {
                            obj = new ResponseObject("e", "Please provide data.");
                        } else {

                            if (params != null && hparams != null) {
                                setSessionValue(request, "qparameters", params);
                                setSessionValue(request, "qhparameters", hparams);
                                System.out.println("\n\n\n\n add both");
                            } else if (params == null && hparams != null) {
                                setSessionValue(request, "qhparameters", hparams);
                                removeSessionValue(request, "qparameters");
                                System.out.println("\n\n\n\n add Hparam and remove param");
                            } else if (params != null && hparams == null) {
                                setSessionValue(request, "qparameters", hparams);
                                removeSessionValue(request, "qhparameters");
                                System.out.println("\n\n\n\n add param and remove hparam");
                            }
                            setSessionValue(request, "question", question);
                            setSessionValue(request, "preview", preview);
                            List<Object> list = new ArrayList<Object>();
                            if (params != null && params.length > 0) {
                                list.add(params);
                            }
                            if (hparams != null && hparams.length > 0) {
                                list.add(hparams);
                            }
                            obj = new ResponseObject("s", "Y", list);
                        }
                    } else {
                        setSessionValue(request, "question", question);
                        setSessionValue(request, "preview", preview);
                        removeSessionValue(request,"qparameters");
                        removeSessionValue(request,"qhparameters");
                        obj = new ResponseObject("s", "N");
                    }

                } else {
                    obj = new ResponseObject("e", "Please enter question to be saved");
                }
            } else {
                obj = new ResponseObject("e", "You must be logged in");
            }
        } catch (Exception e) {
        } finally {
            System.out.println(getSessionValue(request,"question"));
            System.out.println(getSessionValue(request,"preview"));
            System.out.println(getSessionValue(request,"qparameters"));
            System.out.println(getSessionValue(request,"qhparameters"));
            return obj;
        }
    }

    private static Object getSessionValue(HttpServletRequest request, String key) {
        return request.getSession().getAttribute(key);
    }

    private static void setSessionValue(HttpServletRequest request, String key, Object obj) {
        request.getSession().setAttribute(key, obj);
    }

    private static void removeSessionValue(HttpServletRequest request, String key) {
        request.getSession().removeAttribute(key);
    }
}

我也尝试过使用 ModelMap:

 map.put("qparameters",params);

这也不起作用。

编辑:我正在使用 Ajax 请求:

 $.ajax({
            url: 'SaveQuestion/two',
            type: "POST",
            data: {
                question: contentForTest,
                preview: content,
                params: params,
                hparams: hparams
            },
            success: function(data) {
                console.log(data);
            }
        });

在发送响应之前,我正在打印已写入但在 jsp 中未反映的值。

谢谢!

【问题讨论】:

  • JavaScript 无法访问会话变量。响应所需的更新响应正文。
  • 如果您的会话状态没有在某些属性上更新。检查请求和逻辑。

标签: java spring session spring-mvc controller


【解决方案1】:

我认为以下方法行不通:request.getParameterValues("params[]"),因为我认为您的页面中没有名为 params[] 的参数。相反,您可以在方法签名中添加@RequestParam (required = false) String[] params(并为所有参数添加)。

然后,当您声明 @SessionAttributes 时,将这些属性放入您的模型中会将它们添加到会话中。但是您可能需要使用org.springframework.ui.Model 而不是ModelMap,因为后者已被弃用。然后做一个model.addAttribute("params", params)

【讨论】:

  • request.getParameterValues("params[]") 为我工作。没有从模型中删除属性的方法。如果需要,我需要删除一些属性。我该怎么做?
  • model.asMap().remove()。此外,当您完成模型后,您必须调用 sessionStatus.setComplete() 来清空会话属性
  • setComplete() 用于清除所有会话属性,但我不想全部删除。我想删除选定的属性。
  • 正如我所说:model.asMap().remove() 删除特定属性,sessionStatus.setComplete() 在您完成后将它们全部删除(而不是为您可能有或可能没有 pt 的每个属性调用 remove你的模特
  • if (map.containsAttribute("qparameters")) { map.asMap().remove("qparameters"); System.out.print("removed"); } 我试过这个来删除哪些不起作用。已删除在控制台中打印。
【解决方案2】:

JavaScript 无法访问会话变量。响应所需的更新响应正文

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多