2010-08-25 6 views
0

j'ai une page JSP avec hyperlienproblèmes de flux Web de GET Jsp à un POST JSP (formulaire) - Spring MVC annotés

<table> 
<tr> 
    <td>Product Name : </td> 
    <td>${product.name}</td> 
</tr> 
<tr> 
    <td>Description:</td> 
    <td>${product.description}</td> 
</tr> 
<tr> 
    <td>Price:</td> 
    <td>${product.price}</td> 
</tr> 
<tr><td>&nbsp;</td></tr>   
<tr> 
    <td> 
     <a href="../shopbasket/populateBasket?code=${product.productCode}&name=${categoryName}">Add to shopping basket</a>        
    </td> 
</tr> 
<tr><td>&nbsp;</td></tr> 
<tr><td>&nbsp;</td></tr>              
<tr> 
    <td> 
    <table> 
     <tr> 
      <td><a href="<c:url value="../index.html"/>">Return to Home Page</a></td> 
      <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> 
      <td><a href="<c:url value="/j_spring_security_logout"/>">Logout</a> 
       (<security:authentication property="principal.username" />) 
      </td> 
     </tr> 
    </table> 
    </td> 
</tr> 

Et le contrôleur

@ Contrôleur @SessionAttributes ("basket") public class ShopBasketController {

private BasketManager basketManager; 
private CustomerManager customerManager; 
private CategoryManager categoryManager; 

@Autowired 
public ShopBasketController(BasketManager basketManager, CustomerManager customerManager, CategoryManager categoryManager) { 
    this.basketManager = basketManager; 
    this.customerManager = customerManager; 
    this.categoryManager = categoryManager; 
} 

@RequestMapping(value="/basketItems", method=RequestMethod.POST) 
public String removeProduct(@ModelAttribute("basket") Basket basket, BindingResult bindingResult, Model model) {   
    Basket newBasket = ShoppingBasketUtils.removeFromBasket(basket, basketManager); 
    basketManager.update(newBasket); 
    model.addAttribute("basket",newBasket); 
    model.addAttribute("customer", "Sonx"+" Nkuks"); 
    model.addAttribute("totalItems", basketManager.getTotalNumberOfItems(basket)); 
    model.addAttribute("totalPrice", ShoppingBasketUtils.currencyFormat(basketManager.getTotalProductPrice(basket)));  
    return "basketItems"; 
} 

@RequestMapping("/populateBasket") 
public String populateBasket(@RequestParam("code") String productCode, @RequestParam("name") String categoryName, Model model) { 
    Customer customer = customerManager.getCustomer("Sonx", "Nkuks"); 

    if(customer != null) { 
     Basket shopBasket = ShoppingBasketUtils.addToBasket(productCode, categoryManager.getCategory(categoryName), 
       basketManager.getBasket(customer.getReferenceNumber()), basketManager);  
     basketManager.update(shopBasket); 
     model.addAttribute("basket",shopBasket); 
     model.addAttribute("customer", customer.getFirstName()+" "+customer.getLastName()); 
     model.addAttribute("totalItems", basketManager.getTotalNumberOfItems(shopBasket)); 
     model.addAttribute("totalPrice", ShoppingBasketUtils.currencyFormat(basketManager.getTotalProductPrice(shopBasket)));  
     return "basketItems"; 
    } 

    model.addAttribute("customer", "test".concat(" test")); 
    return "/error";    
} 

}

Puis la forme ...

<form:form commandName="basket"> 
<table> 
    <tr> 
     <td> 
     <table> 
      <tr> 
       <td>Customer Name : </td> 
       <td>${customer}</td> 
      </tr> 
     </table> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     <table width="600" border="1" cellspacing="0" cellpadding="2" 
      border="0"> 
      <thead> 
       <tr> 
        <td>Products:</td> 
       </tr> 
       <tr> 
        <td>Product Name</td> 
        <td>Product Code</td> 
        <td>Description</td> 
        <td>Price</td> 
        <td>Remove</td> 
       </tr> 
      </thead> 
      <tbody> 
       <c:forEach items="${basket.products}" var="product"> 
        <tr> 
         <td>${product.name}</td> 
         <td>${product.productCode}</td> 
         <td>${product.description}</td> 
         <td>${product.price}</td> 
         <td><form:checkbox path="removeItemCodes" value="${product.productCode}" /></td> 
        </tr> 
       </c:forEach> 
      </tbody>    
     </table> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <table> 
       <tr> 
        <td>Total Price</td> 
        <td>&nbsp;</td>        
        <td>${totalPrice}</td> 
       </tr> 
       <tr> 
        <td>Total Items</td> 
        <td>&nbsp;</td>      
        <td>${totalItems}</td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
    <tr><td>&nbsp;</td></tr>   
    <tr> 
     <td><input type="submit" value="Remove Items" /></td> 
    </tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr>              
    <tr> 
     <td> 
     <table> 
      <tr> 
       <td><a href="<c:url value="../index.html"/>">Return to Home Page</a></td> 
       <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> 
       <td><a href="<c:url value="/j_spring_security_logout"/>">Logout</a> 
        (<security:authentication property="principal.username" />) 
       </td> 
      </tr> 
     </table> 
     </td> 
    </tr> 
</table> 

Quand je presse le lien de la première JSP "" le contrôleur exécute avec succès la méthode populateBasket et charge le formulaire . Mais quand je soumets le formulaire, je veux qu'il appelle la méthode POST (basketItems) ... Mais ce n'est pas le cas, appuyer sur le bouton submit exécute toujours la méthode GET (populateBasket) .. Cela ne se produit pas si je charge le former directement à partir de la page d'index, il charge avec succès. Le problème est quand venant de cette JSP?

Répondre

0

Si vous souhaitez que le formulaire soit soumis à une URL différente de celle utilisée pour extraire la page, vous devez définir explicitement le action. Sinon Spring va juste le remplir avec l'URL actuelle.