2012-01-12 50 views
0

我想從會話範圍中複製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"; 
} 
+0

爲什麼要將更廣泛的範圍內的某些內容複製到更窄的範圍? – 2012-01-12 15:06:07

+0

我忘了爲控制器添加@RequestParam(「activityId」)int [] activitiesNumbers。我想重複使用這種方法(因爲有多個頁面由此提供),而無需向方法本身添加額外的代碼。如果我有@RequestParam註釋,則參數應該作爲強制參數提供。如果我不提供它,那麼我會得到不良的Http請求。 – Aubergine 2012-01-12 15:12:49

回答

1

你設置請求屬性在當前要求 - 不是一個表單提交發。

使用充滿會話值一個隱藏的表單字段,或者只是把它直接對話 - 我看不出一個令人信服的理由某處複製其他如果你已經擁有了它。

+0

你是正確的一千倍,我只是意識到這一點。我已經這樣做了,因爲我想重新使用控制器方法(就像它使用了幾個頁面一樣)。原來它有@RequestParam(「activityId」)int [] activitiesNumbers,你可以看到如果我不提供activityId從請求我會得到返回BAD REQUEST 400或500 HTTP錯誤。 – Aubergine 2012-01-12 15:07:50