2012-01-12 7 views
0

セッションスコープのint []という名前のidNumbersをスコープの要求にコピーします。 リクエストスコープから属性を取得しようとするたびに、コントローラでnullポインタ例外が発生するため、以下のコードは機能しません。私はスコープを理解していないと感じているし、私はどちらかを間違った方法でプロパティを設定します。セッションから要求スコープへのコピー属性

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> 

コントローラ・コードは、ここでIは、異なるアプローチを試みたが、本質的に結果がときにあるべきこのようなパラメータは、リクエストスコープに存在しないことを告げます。

最初の二つは、(空の)ヌルを与え、その後、nullポインタ例外:

@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

より広い範囲で利用可能なものを狭い範囲にコピーしたいのはなぜですか? –

+0

コントローラーの@RequestParam( "activityId")int [] activitiesNumbersを含めるのを忘れてしまった。メソッド自体に余分なコードを追加することなく、このメソッドを再利用したい(いくつかのページがこれによって提供されるため)。 @RequestParam注釈がある場合、パラメータは必須パラメータとして指定する必要があります。私がそれを提供しない場合、私は悪いHttpリクエストを取得します。 – Aubergine

答えて

1

あなたは現在リクエストで要求属性を設定している - ではないフォームの送信で行わ新しい 1 。

セッション値で埋め込まれた隠しフォームフィールドを使用するか、直接セッションからプルするだけです。既にそれがある場合はelseのようにコピーする必要はありません。

+0

あなたは何千回も正しいです、私はそれを実現しました。私はコントローラメソッドを(いくつかのページで使われているように)再利用したかったので、これを行った。そして、もともとは@RequestParam( "activityId")int [] activitiesNumbersを持っていました。私がrequestからactivityIdを提供していないかどうかわかるように、BAD REQUEST 400または500のHTTPエラーが返されます。 – Aubergine

関連する問題