[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.간단히
from https://stackoverflow.com/questions/48355205/binding-child-object-on-submit-spring-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] App Engine에서 스프링 애플리케이션을 35MB보다 더 많이 배포하는 방법 (0) | 2019.05.26 |
---|---|
[SPRING] 스프링 부트와 함께 실행 가능한 jar 명령을 사용할 때 Resource FileNotFoundException (0) | 2019.05.26 |
[SPRING] 봄 데이터 나머지를 통해 합성 테이블에 데이터를 저장할 수 없습니다 json post (0) | 2019.05.26 |
[SPRING] Spring + Mongo에서 문서 배열에서 항목 제거 (0) | 2019.05.26 |
[SPRING] Spring -XD 스트림 배포 실패 (0) | 2019.05.26 |