将会话中的属性复制到请求范围

时间:2012-01-12 14:53:01

标签: java jsp servlets

我想将会话范围中的int [] named 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";
 }

1 个答案:

答案 0 :(得分:1)

您正在当前请求中设置请求属性,而不是在表单提交时设置的

使用填充了会话值的隐藏表单字段,或者直接将其从会话中拉出来 - 如果您已经拥有它,我没有看到将其复制到 else 的令人信服的理由。