Весна MVC.Вопрос о видении решения / Дизайн Вопрос - PullRequest
0 голосов
/ 14 февраля 2011

[весна 3.0.5] MVC

У меня в классе так:

public class Address {

  private String street;
  private String city;

  public String getStreet() {
     return this.street;
  }

  public void setStreet(String street) {
     this.street = street;
  }

  public String getCity() {
     return this.city;
  }

  public void setCity(String city) {
    this.city = city;
  }
}

Моя функция - полагаться на возможность добавления бесконечного количества адресов на сайт(JSP с пружиной и тегом формы).Может кто-нибудь дать скелет такой функциональности в контроллере?

1 Ответ

2 голосов
/ 14 февраля 2011

Ваш вопрос немного неясен.Ответ двоякий:

Отображение списка адресов

 @Controller
 public class SomeController {

     @RequestMapping("/somepage.jsp ") 
     public String somePage(HttpServletRequest request, ModelMap model) {
         List<Address> addresses = ....
         // We can now access the key "addresses" in our jsp
         model.put("addresses", addresses);
         return "/WEB-INF/jsp/somepage.jsp";
     }
 }

На своей странице jsp вы можете отобразить список адресов с помощью, например, библиотеки core jstl, здесь отмеченной какпрефикс c.

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html> 
   ...

    <c:forEach items="${addresses}" var="addr">
        City:   ${addr.city}   <br/>
        Street: ${addr.street}
    </c:forEach>

   ....
</html>

Отправка адресов

Если вы хотите отправить неопределенное количество адресов, это немного сложнее.Что вы можете сделать, это создать шаблон формы javasript, который при нажатии кнопки или около того создает два дополнительных поля формы.Убедитесь, что каждое поле формы получит уникальное имя, например:

 <input type="text" name="street_1" />
 <input type="text" name="city_1" />

 <input type="text" name="street_2" />
 <input type="text" name="city_2" />

 ....

Затем вы можете итерировать поля, используя request.getParameterMap(), где вы создаете параметры адреса на основе совпадающих имен (например, необходимо связать street_1с city_1 и пр.).

[РЕДАКТИРОВАТЬ] Чтобы дать вам представление о том, как может выглядеть javascript, я даю вам это из головы (обратите внимание, я не проверял этот код, он тамчтобы дать вам представление о том, как это может выглядеть ).

var i = 0; // initialize to how many addresses you initially display
function addAddress() {
    var form = document.getElementById('form');
    var html = '<input type="text" name="street_' + i + '" />' + 
               '<input type="text" name="city_'   + i + '" />';
    form.innerHTML += html;
    i++;
}

Затем вызовите javascript при нажатии кнопки:

<input type="button" onClick="addAddress();" value="add address" />

Если вы решили использовать, например, jQuery , это будет еще проще.Например,

var i  = 0:
$("#addbtn").click(function() {
    $("#someId").append(
         '<input type="text" name="street_' + i + '" />' + 
         '<input type="text" name="city_'   + i + '" />');
    i++;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...