JSP:如何将表单选择选项链接到Java对象

时间:2015-09-04 11:24:30

标签: javascript java jquery spring jsp

我有两个链接的对象。 Address Country ManyToOne关系由countryId关联。我正在尝试使用JSP添加网页以添加新的Address。在此页面上,您可以从下拉列表中选择Country

我已经尝试了很多不同的方法来做到这一点,但我似乎无法将下拉列表中的Country对象链接到Country中的Address对象,我一直得到跟随错误

Field error in object 'address' on field 'country': rejected value [com.company.project.domain.Country@670b11d7]; codes [typeMismatch.address.country,typeMismatch.country,typeMismatch.com.company.project.domain.Country,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [address.country,country]; arguments []; default message [country]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.company.project.domain.Country' for property 'country'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.company.project.domain.Country] for property 'country': no matching editors or conversion strategy found

这是我尝试的许多不同选项中的两个,但我不断收到同样的错误

尝试1 JAVA

List<Country> countries = countryService.getAllCountrys();
    LinkedHashMap<Country, String> countryMap = new LinkedHashMap<Country, String>();
    for(Country country : countries){
        countryMap.put(country, country.getCountryName());
    }

    model.addAttribute("countries", countryMap);

尝试1 JSP

<tr>
    <td>Country:</td>
    <td><form:select path="country">
    <form:options items="${countries}" />
    </form:select>
    </td>
</tr>

尝试2 JAVA

List<Country> countries= countryService.getAllCountry();
    model.addAttribute("countries", countries);

尝试2 JSP

<tr>
    <td>Country:</td>
    <td><form:select path="country" id="country">
        <form:options items="${countries}" itemValue="country" itemLabel="countryName" />
    </form:select>
</tr>

我可以正确填充下拉菜单但是我尝试保存它似乎是试图保存字符串值而不是对象值。我正在使用POST请求来保存页面

有谁知道怎么做?

3 个答案:

答案 0 :(得分:2)

对于这些情况,我就是这样做的:

JAVA

List<Country> countries= countryService.getAllCountry();
model.addAttribute("countries", countries);

JSP

<select name="idCountry">   
<c:forEach items="${countries}" var="country">
<option value="${country.id}">${contry.countryName}</option> 
</c:forEach>

POST JAVA

Country c = CountryRepositroy.findById();
Adresse.setCountry(c);

答案 1 :(得分:1)

您将无法获取对象值,因为HTML表单提交了由form:options的itemValue属性分配给下拉列表的String值。 您尝试的一件事是将id作为国家/地区的值并从中创建国家/地区对象,然后尝试保存它。

同样,您提交Country对象作为整体,我建议您只需将id作为值,并将名称作为值显示在下拉列表中,并在服务器端从id创建country对象。

答案 2 :(得分:0)

您需要添加您的收藏品以进行申请。见下面的例子

    request.setAttribute("countries", countryMap);
    RequestDispatcher view = request.getRequestDispatcher("Index.jsp");
    view.forward(request, response);