2016-09-11 18 views
-1

私は週末全体を自分の問題でネットを検索するのに費やしました。私は本当にばかげた何かを見逃しているようですが、私はそれを手に入れませんでした。POSTオブジェクトの送信

ここに問題があります。私はオブジェクトをJSPに送り、JSPでそのコンテンツを見ることができました。私は彼らのフォームを提出しました。コントローラーに戻ると、オブジェクトが上書き/再作成されたことが示されます。私は理解できないようです。私は自分のTomcat上のログをチェックしますが、私は私のコントローラ上のいずれかのエラー...

が表示されない:以下、私が持っている

@RequestMapping(value = {"/", "/home"}, method = RequestMethod.GET) 
public String homePage(ModelMap model) { 
    model.addAttribute("user", getPrincipal()); 


    Catalog catalog = catalogService.getCatalogByCategory(Catalog.CatalogCategory.ALL); 

    model.addAttribute("catalog", catalog); 
    model.addAttribute("numberOfItemsAdded", "500"); 
    return "welcome"; 
}` 

、私のJSPで:

<form:form method="POST" modelAttribute="catalog"> 
      <form:hidden path="id"/> 

      <div id="products" class="row list-group"> 
       <c:forEach var="orderItem" items="${catalog.orderItems}"> 

        <div class="item col-xs-4 col-lg-4"> 
         <div class="thumbnail"> 
          <img class="group list-group-image" src="http://placehold.it/400x250/000/fff" alt=""/> 

          <div class="caption"> 
           <h4 class="group inner list-group-item-heading"> 
             ${orderItem.name}</h4> 

           <p class="group inner list-group-item-text"> 
             ${orderItem.description} 
           </p> 

           <div class="row"> 
            <div class="col-xs-12 col-md-6"> 
             <p class="lead"> 
              R ${orderItem.price}</p> 
            </div> 
            <div class="col-xs-12 col-md-6"> 
             <label for="${orderItem.id}" class="btn btn-primary">Add to Cart <input 
               type="checkbox" id="${orderItem.id}" name="orderItem.addedToCart" 
               class="badgebox"><span class="badge">&check;</span></label> 
            </div> 
           </div> 
          </div> 
         </div> 
        </div> 
       </c:forEach> 
      </div> 

      <div class="row"> 
       <div class="form-group"> 
        <div class="col-sm-12 pull-right"> 
        </div> 
        <div class="col-sm-2 pull-right"> 

         <input type="submit" 
           class="btn btn-default btn-block btn-primary" 
           value="Next" name="action" formmethod="POST" 
           formaction="confirmList"/> 

        </div> 
       </div> 
      </div> 
     </form:form>` 

押した後

@RequestMapping(value = "/confirmList", method = RequestMethod.POST) 
public String confirmList(@ModelAttribute Catalog catalog, @ModelAttribute String numberOfItemsAdded) { 
    System.out.println("\n\n------>catalog = " + catalog); 
    System.out.println("\n\n------>numberOfItemsAdded = " + numberOfItemsAdded); 
    List<OrderItem> selectedItems = new ArrayList<OrderItem>(); 
    for (OrderItem orderItem : catalog.getOrderItems()) { 
     if (orderItem.isAddedToCart()) { 
      selectedItems.add(orderItem); 
     } 
    } 
    //model.addAttribute("numberOfItemsAdded", selectedItems.size()); 
    return "welcome"; 
} 

`

:コントローラにフォームデータを送信し、 "次へ"、

System.out.println(...)出力以下:

------>catalog = Catalog{id=1, name='null', category='null', orderItems=null} 


------>numberOfItemsAdded = 

ものが空の出力....です: '(

は私が.....私がここで間違ってやっている何見当がつかない

+2

カタログのIDのみがバインドされていることがわかります。残りのフィールドは、フォームにバインドしていないため、nullです。 などのスプリングフォームタグを使用してidと同じ方法でバインドする必要があります。numberOfItemsAddedに関しては、@ModelAttributeとして渡さないでください。すでにGETメソッドのModelMapにあります。あなたのPostメソッドのmodelMapから取り出してください – george

+0

ありがとう、ジョージ!これは私の問題を完全に解決する!もう一度ありがとう! –

+0

この問題は、もはや再現できない問題や単純な誤植によって引き起こされました。同様の質問がここでは話題になるかもしれないが、これは将来の読者を助けるとは思わない方法で解決された。これは、転記する前に問題を再現するのに必要な最短のプログラムを特定して綿密に検査することによって回避することができます。 –

答えて

0

これはジョージのコメントラインで答えられました。私がしなければならなかったことは、それらのヌルフィールドを非表示/バインドすることだけでした。

「無視する」または「そのままのままにする」を意味するために、「隠された」という用語を使用することに非常に関連しています。しかし、とにかく、上記のソリューションは私が探していたものとまったく同じでした。

ありがとうございます

関連する問題