2012-02-14 6 views
0

リクエストのすべての情報、ユーザ、フォームの選択などを格納する、メインオブジェクトのリクエストと呼ばれるオブジェクトがあります。異なるフォームの間に?各.GETでリクエストオブジェクトを設定し、各.POSTに渡される唯一の情報は.GETページのフォームにあるものです。だから私は、このようなSpring内のコントローラ間でオブジェクトデータを持続させる

<form:input path='requestId' style='display:none' />

<form:input path='currentUserId' style='display:none' />

<form:input path="step" style='display:none' />

として隠しフィールドを持っている必要があり、各ページに、私はこれらのフィールドを必要とし、また、要求のフィールドの残りの部分を持っていると思います私のオブジェクトの各フィールドごとにそれを繰り返さなくても、フォーム上に存在しないオブジェクトです。

@RequestMapping(value = "/review", method = RequestMethod.GET) 
public ModelAndView showCorReview(@RequestParam(value = "requestId") String requestId, 
            @CookieValue(value = "EMP_ID", defaultValue = "168") int userId) 
{ 
    Request request = requestManager.getRequestById(Integer.parseInt(requestId)); 

    request.setCurrentUserId(userId); 

    String pageTitle = "2.1: Initiate New Service Request -- (Review)"; 
    ModelAndView mav = new ModelAndView(); 
    mav.setViewName("newRequest/review"); 
    mav.addObject("title", pageTitle); 
    mav.addObject("request", request); 
    mav.addObject("cpm", userManager.getUserById(request.getCpm()).getName()); 
    return mav; 
} 

@RequestMapping(value = "/review", method = RequestMethod.POST) 
public String saveReview(Request request, @RequestParam(value = "commentData", required = false) String[] additionalComments) 
{ 
    if (additionalComments != null) 
     commentLogManager.addCommentLog(additionalComments, request); 

    if (request.getRejectReason() == "") 
    { 
     request.setCpm(admin.getCPM(request.getContract()).getId()); 
     request.setCor(admin.getCOR(request.getContract()).getId()); 
     requestManager.updateRequest(request);   
    } 
    else 
    { 
     if (request.getSubmitType().equals("return")) 
     { 
      request.setNextStep(1); 
      requestManager.moveRequestToStep(request); 
     } 
    } 
    return worksheetUrl + request.getId(); 
} 

Alternatately私も.POSTに Request request = requestManager.getRequestById(Integer.parseInt(requestId))

はその後、すべてのフォームフィールドにセッターを使用しないこともできますが、再び、私は実際に明示することをを呼び出すことなく、それ自身の上で存続するためにデータを好むだろう。

+0

隠されたフィールドについて聞いたことがありますか?また、データベースとHTTPセッションの使用についてはどうですか? –

+0

私は隠しフィールドを使用していますが、リクエストオブジェクトに30以上のフィールドがあり、指定されたフォーム上に使用されているものが一部しかない場合、各ページに20個の追加の隠しフィールドを追加したくありません。 もう一度、私はデータベースから取得できると述べましたが、すべての投稿でデータベースにヒットしたくはありません。リクエストオブジェクトのデータを連続して渡すことなくdb – Tim

+0

display:noneで入力を隠すことは隠しフィールドではありません。 htmlには真の隠しフィールドである 'input type =" hidden "があります。春はそれがここにあります:http://static.springsource.org/spring/docs/3.1.x/reference/html/spring-form.tld.html#spring-form.tld.hiddenあなたの最善の策が行くように聞こえますセッションを使用しています。 – digitaljoel

答えて

0

@Tim私があなたの要求を正しく理解していれば、一連のフォームがあり、あるフォームから別のフォームに情報を転送したり、データベースにアクセスしたり、私は@JB NizelのHTTPセッションの使用を提案することができますが、セッションを「重い」ものにしたくないかもしれません。結局のところ、アプリケーションスコープの次に最も永続的なスコープです。

Spring Web Flowが答えかもしれません。 Flow-scopeは、ユーザーがあるフォームから次のフォームに進むときにフォームステートを構築できるようにします。さらに、残っていたくないセッション変数とは異なり、フローが終了したときにフォームスコープの変数について心配する必要はありません。

+0

最初はうまくいきましたが、残念ながら必ずしもユーザーのためのパスは1つではありません。何かを変更してbに戻り、いつでも保存して後で戻ってくるので、リクエストオブジェクトのセッションを実装する方法を調べる必要があるようです – Tim

関連する問題