Spring MVC。关于愿景解决方案/设计问题的问题

时间:2011-02-14 07:42:23

标签: java spring spring-mvc

[春季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;
  }
}

我的功能是依赖于在站点上添加无限数量地址的可能性(带有spring和form标签的JSP)。有人可以在控制器中提供这种功能的骨架吗?

1 个答案:

答案 0 :(得分:2)

你的问题有点不清楚。答案是双重的:

显示地址列表

 @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 lib显示地址列表,此处使用前缀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表单模板,按下按钮或creates两个额外的表单字段。确保每个表单字段都有一个唯一的名称,例如:

 <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++;
});