繁体   English   中英

Java Spring Form:以JSP形式将一个实体映射到另一实体

[英]Java Spring Form: map one entity to another entity in JSP form

我有两个实体:“国家/地区”和“联系人”:

@Entity
@Table(name="countries")
@NamedQuery(name="Country.findAll", query="SELECT c FROM Country c")
public class Country implements Serializable {    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String code;

    private String name;

    @OneToMany(mappedBy="countryBean")
    private List<Contact> contacts;
//...
}

@Entity
@Table(name="contacts")
@NamedQuery(name="Contact.findAll", query="SELECT c FROM Contact c")
public class Contact implements Serializable {    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String city;

    private String street;

    @ManyToOne
    @JoinColumn(name="countries_id")
    private Country countryBean;
//...
}

我需要添加新联系人并从数据库中选择现有国家。

我的控制器有一部分:

@RequestMapping(value="/contact/add", method=RequestMethod.GET)
public String contactAddGetPage(Model model) {

    Contact contact = new Contact();
    model.addAttribute("contact", contact);

    List<Country> countries = countryManager.findAll();
    model.addAttribute("countries", countries);

    return "contactAdd";        
}

@RequestMapping(value="/contact/add", method=RequestMethod.POST)
    public String contactAddSave(
            @Valid @ModelAttribute("contact") Contact contact, BindingResult result, 
            Model model, final RedirectAttributes redirectAttributes) {

        if (result.hasErrors()) {
            model.addAttribute("error", "error");
            return "contactAdd";
        }

        contactManager.save(contact);           
        redirectAttributes.addFlashAttribute("message", "ok");
        return "redirect:/contact";     
    }

以及使用Spring Form的“ contactAdd.jsp” JSP:

<c:url var="sendToUrl" value="/contact/add" />
<form:form method="post" action="${sendToUrl}" commandName="contact">
    <table>
        <tr>
            <td><form:label path="street">Street</form:label></td>
            <td><form:input path="street"/></td>
            <td><form:errors path="street"></form:errors></td>
        </tr>
        <tr>
            <td><form:label path="city">City</form:label></td>
            <td><form:input path="city"/></td>
            <td><form:errors path="city"></form:errors></td>
        </tr>
        <tr>
            <td><form:label path="countryBean">Country</form:label></td>
            <td>
                <form:select path="countryBean">
                    <form:options items="${countries}" itemValue="id" itemLabel="name" />
                </form:select>
            </td>
            <td><form:errors path="countryBean"></form:errors></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Add" /></td>
        </tr>
    </table>
</form:form>

如果我在www浏览器中转到表单页面,则看起来还可以。 从数据库中有带有国家名称的html select。

但是,如果我单击“添加”按钮,则会为“国家/地区”表格选择:

无法将属性countryBean的java.lang.String类型的属性值转换为所需的com.example.test.entity.Country类型; 嵌套异常为java.lang.IllegalStateException:无法将属性countryBean的[java.lang.String]类型的值转换为所需的[com.example.test.entity.Country]类型:没有找到匹配的编辑器或转换策略

我了解错误。 我必须将国家/地区转换为“国家/地区”类。 但是我该怎么办呢?

PropertyEditorSupport的效果很好: http : //empire5.com/development/binding-a-custom-object-in-spring-3/

我在MySQL中有错误(数据库中的错误列)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM