복붙노트

[SPRING] 제출 봄에 자식 개체 바인딩 mvc

SPRING

제출 봄에 자식 개체 바인딩 mvc

나는 Java에서 초보자이기 때문에이 질문은 매우 간단 해 보인다. 나는 다음과 같은 모델을 가지고있다.

@Entity(name="website")
public class Website {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="websiteId", nullable=false, unique=true)
private long websiteId;
@ManyToOne
@JoinColumn(name = "publisherId")
private Publisher publisher;

public Website() {
}

//... all getter and setter....
}

웹 사이트 클래스에서 게시자 유형의 개체를 볼 수 있습니다.

@Entity(name="publisher")
public class Publisher {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="publisherId", nullable=false, unique=true)
private long publisherId;
private String publisherName;

@OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="publisherId")
private List<Website> listWebsite;

public Publisher() {
}

//...all getter and setter...
}

이제 웹 사이트 유형의 전체 개체를 제출할 양식이 생겼습니다. 방금 드롭 다운 목록을 만들고 사용자가 게시자를 선택할 수있게했습니다. 양식 :

<form:form action="/LineJavaTest1/website/add" commandName="websiteForm" method="post">
                <form:input path="websiteName" size="30" placeholder="Website Name"/>
                <form:input path="websiteUrl" size="30" placeholder="Website Url"/>
                <form:select path="publisher" multiple="false" size="1">
                    <%--<form:options itemValue="publisherId" itemLabel="publisherName"/>--%>
                    <form:option value="NONE" label="--- Select ---" />
                    <form:options items="${publishers}" itemValue="publisherId" itemLabel="publisherName"/>
                </form:select>
                <form:hidden path="websiteId" size="30" placeholder="Website Id"/>
                <input type="submit" class="btn btn-default" value="Save" />
            </form:form>

보시다시피, 양식에 대한 경로를 설정합니다 : select tag를 "publisher"로, itemValue를 "publisherId"로 설정하십시오. 게시 할 때 게시 된 개체의 게시자 속성에 publisherId (긴 형식 값)를 게시합니다. 긴 형식이 아닌 게시자 형식이 필요하므로 유효성 검사가 실패합니다.

내 질문 : 어떻게 게시합니까? 게시자. 게시자 ID는 올바른 방법으로 게시합니까?

최신 정보:

내 컨트롤러에 추가 작업 :

@RequestMapping(value = "/add", method = RequestMethod.GET)
public String showForm(ModelMap mm, @ModelAttribute("websiteForm") Website websiteForm) {
    mm.put("websiteForm", new Website());
    mm.put("publishers", publisherService.getAll());
    return "website/add";
}

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(@ModelAttribute("websiteForm") Website websiteForm, BindingResult result, ModelMap mm) {
    websiteValidator.validate(websiteForm, result);
    if (result.hasErrors()) {
        return "error";
    }

    if (websiteForm.getWebsiteId()>0) {
        websiteService.edit(websiteForm);
    }else
    {
        websiteService.add(websiteForm);
    }
    return "redirect:index";
}

Shantaram Tupe에서 제안한 것처럼 선택 태그의 경로를 publisher에서 publisher.publisherId로 변경했지만 양식을 html로 생성 할 수 없습니다. 나는 publisher에서 publisher.publisherName으로 바뀌었고 모든 것이 잘 보였으며, form은 html로 볼 수있었습니다.이 값은 publisher.publisherName의 서버에 다시 게시되었습니다. 어떻게 게시자에게 다시 게시 할 수 있습니까? 게시자 ID는 무엇입니까? 내 publisherId 필드의 구성에 문제가있는 것 같습니다.

업데이트 2

내 문제는 HTML 양식 만 생성 중입니다. 같은 브라우저에서 생성 된 HTML 폼을 편집 시도 :

<form.....>
<select id="publisher.publisherName" name="publisher.publisherName" size="1">......</select>
</form>

좋아하는 것 :

<form.....>
<select id="publisher.publisherId" name="publisher.publisherId" size="1">......</select>
</form>

모든 것이 잘 작동합니다. 자, 어떻게 publisher.publisherId를 사용하여 폼을 생성 할 수 있습니까?

마지막 업데이트

마침내 찾았습니다. PublisherName은 문자열 형식이므로 PublisherId에서는 작동하지 않지만 PublisherName에서는 작동합니다. 선택 태그 i에 사용 된 덤프 항목 (

)은 값이 NONE - 긴 유형 값일 수 없습니다. 0으로 변경하고 양식이 성공적으로 생성되었습니다.

해결법

  1. ==============================

    1.간단히 태그의 경로를 publisher에서 publisher.publisherId로 변경하십시오.

    간단히 태그의 경로를 publisher에서 publisher.publisherId로 변경하십시오.

    내 편에서 더 많은 것들 :

  2. from https://stackoverflow.com/questions/48355205/binding-child-object-on-submit-spring-mvc by cc-by-sa and MIT license