【发布时间】: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