2015-12-30 4 views
2

Я пишу приложение, которое является очень простым интернет-магазином. У меня есть категория телефонов здесь (2 телефона доступны), и после щелчка на одной из них появилась новая страница с информацией о дисплеях телефона, в описании я получил кнопку «добавить в корзину», и вот что - я хочу, чтобы после нажатия кнопки все информация о том, что телефон пойдет в базу данных и отобразит их одновременно на странице «cart». Соединение с db и управление данными в среде IDE для меня не проблематично, но как кнопка «Добавить в корзину» будет знать, какой телефон я выбрал (телефон1 или телефон2)? Я должен создать еще один контроллер для Cart, или вот еще одно решение для этого?Spring MVC - как добавить товар в корзину?

PhoneController:

@Controller 
@RequestMapping 
public class PhoneController { 
DBConnection db = new DBConnection(); 
Cart cart; 

@RequestMapping(value="/phone1.html", method = RequestMethod.GET) 
public ModelAndView phone1Page() { 

    ModelAndView phone1 = new ModelAndView("Phone1"); 

    return phone1; 

} 

@RequestMapping(value="/phone2.html", method = RequestMethod.GET) 
public ModelAndView phone2Page() { 

    ModelAndView phone2 = new ModelAndView("Phone2"); 

    return phone2; 

} 


@RequestMapping(value="/cart.html", method = RequestMethod.POST) 
public ModelAndView addToChart(){ 


    ModelAndView cart = new ModelAndView("Cart"); 
    return cart;  

} 
} 

Phone1.jsp:

<form action="/OnlineShop/cart.html" method="post"> 
<div style="padding-right: 40px"> 
    <table border="1"> 
     <tr> 
      <td>Name</td> 
      <td>iPhone 6</td> 
     </tr> 
     <tr> 
      <td>Company</td> 
      <td>Apple</td> 
     </tr> 
     <tr> 
      <td>Type</td> 
      <td>Phone</td> 
     </tr> 
     <tr> 
      <td>Price</td> 
      <td>400$</td> 
     </tr> 
    </table> 
    <input type="submit" value="Add to Cart"/> 
</div> 
</form> 

cart.jsp:

<div style="padding-right: 40px"> 
    <table border="1"> 
     <tr> 
      <td>ID</td> 
      <td>Product</td> 
      <td>Name</td> 
      <td>Company</td> 
      <td>Type</td> 
      <td>Price</td> 
      <td>Action</td> 
     </tr> 
     <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     </tr> 

    </table> 
</div> 

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0"> 
<display-name>OnlineShop</display-name> 

<servlet> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

и весенне-диспетчерская-servlet.xml:

<context:component-scan base-package="com.damian.controller" /> 
<mvc:annotation-driven/> 


<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/WEB-INF/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 

</bean> 
+0

You может опубликовать ваш web.xml – Abdelhak

+0

@Abdelhak: done – dante

ответ

1

Сделайте POST запрос на ваш /cart.html отображения с параметром запроса, например: /cart.html?selected=iPhone6. В качестве альтернативы вы можете добавить данные формы в свой почтовый запрос с информацией о выбранном телефоне. Я предполагаю, что у вас есть телефоны также в базе данных с каким-то идентификатором, если вы спрячете этот идентификатор в своей форме, тогда вы можете легко увидеть, какое устройство было выбрано.

Это один из способов решения проблемы.

<form action="/OnlineShop/cart.html?selectedPhone=iPhone6" method="post"> 
    <div style="padding-right: 40px"> 
     <table border="1"> 
      <tr> 
       <td>Name</td> 
       <td>iPhone 6</td> 
      </tr> 
      <tr> 
       <td>Company</td> 
       <td>Apple</td> 
      </tr> 
      <tr> 
       <td>Type</td> 
       <td>Phone</td> 
      </tr> 
      <tr> 
       <td>Price</td> 
       <td>400$</td> 
      </tr> 
     </table> 
     <input type="submit" value="Add to Cart"/> 
    </div> 
</form> 

И проверьте параметр запроса в контроллере:

@RequestMapping(value="/cart.html", method = RequestMethod.POST) 
public ModelAndView addToChart(@RequestParam String selectedPhone){ 

    ModelAndView cart = new ModelAndView(selectedPhone); 
    return cart;  
} 
1

Если вы хотите всю информацию о телефоне будет идти в базу данных и отображать их в то же самое время в странице cart вы можете попробовать добавить commandName так: Но прежде чем вы должны создать класс для dto например: по имени PhoneClass

class public PhoneClass{ 
    private name ...; 
    private ... 
    // and 
    setters and getters 
    } 

<form action="/OnlineShop/cart.html" method="post" commandName="phoneInfo"> 
<div style="padding-right: 40px"> 
    <table border="1"> 
    <tr> 
     <td>Name</td> 
     <td>iPhone 6</td> 
    </tr> 
    ... 
    <input type="submit" value="Add to Cart"/> 
</div> 
</form> 

И в вашем контроллере вы можете сделать так:

@RequestMapping(value="/cart.html", method = RequestMethod.POST) 
    public String someAction(@ModelAttribute("phoneInfo") PhoneClass phoneInfo, Model model) { 
    // TODO save un database attributes of `PhoneClass` 
    model.addAttribute("phoneInfo", phoneInfo); 

    return "somepage"; 
    } 

И на вашей странице Cart.jsp вы можете использовать Еогеасп из jstl для извлечения данных из atrribute phoneInfo и поместить их в Cart.jsp как тыс:

<div style="padding-right: 40px"> 
<table border="1"> 
    <tr> 
    <c:forEach var="element" items="${phoneInfo}" varStatus="status"> 
    <td> Name</td> <td>${status.name}</td> 
     .... 
     </c:forEach> 

    </div> 
Смежные вопросы