我想从会话范围中复制int []命名idNumbers以请求范围。 下面的代码不工作,因为我试图从请求范围中检索属性时,在我的控制器中收到空指针异常。我觉得我既不是在理解范围,也不是以错误的方式设置财产。从会话复制属性到请求范围
JSP代码
<c:if test="${sessionScope.idNumbers!=null}"> // this line is OK and session scope contains the idNumbers(checked)
<% request.setAttribute("activityId", session.getAttribute("idNumbers")); %>
<c:set var="activityId" scope="request" value="${sessionScope.idNumbers}"/>
<form class="spanFormat" method="post" action="/blablabla">
<p>
<input value="Attach" type="submit" style="color: green;" />
<input name="programId" style="display: none;" value="${blabla.programId}" />
</p>
</form>
</c:if>
控制器代码,在这里,我尝试了不同的方法,但本质上是结果指出这样的参数并没有在要求范围时,它应该存在。
前两个给空值(空),然后空指针异常:
@RequestMapping(value = "/program/set", method = RequestMethod.POST)
public String setActivitiesForProgram(@RequestParam("activityId") int[] activitiesNumbers,
Model model, HttpSession hs, HttpServletRequest hr)
throws ServletRequestBindingException {
String activityNumber1 = (String) hr.getParameter("activityId");
logger.info(activityNumber1);
String activityNumber = (String) hr.getAttribute("activityId");
logger.info(activityNumber);
String[] activitiesNumbersss = (String[]) hr.getAttribute("activityId");
logger.info(activitiesNumbersss[0]);
String[] activitiesNumberss = hr.getParameterValues("activityId");
logger.info(activitiesNumberss[0]);
return "someView";
}
为什么要将更广泛的范围内的某些内容复制到更窄的范围? – 2012-01-12 15:06:07
我忘了为控制器添加@RequestParam(“activityId”)int [] activitiesNumbers。我想重复使用这种方法(因为有多个页面由此提供),而无需向方法本身添加额外的代码。如果我有@RequestParam注释,则参数应该作为强制参数提供。如果我不提供它,那么我会得到不良的Http请求。 – Aubergine 2012-01-12 15:12:49