2011-03-05 4 views
0

스프링 MVC는 최대 절전 모드로 모델 Obj에 데이터를 어떻게 보냈는가?

class Person { 

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "person_countries", joinColumns = { @JoinColumn(name = "person_id") }, 
     inverseJoinColumns = { @JoinColumn(name = "country_id") }) 
private List<Country> countries ; 

Class country { 

@Id 
@Column(name = "country_id") 
@GeneratedValue 
private Integer country_id; 


@Column(name = "country_name") 
private String country_name; 

이제 사용자가 하나 이상의 국가를 선택할 수 있도록 양식의 확인란을 표시하고 있습니다. 하지만 나는 그 형태로 국가 개체를 사람에게 어떻게 전달할 것인지 혼란 스럽다.

addpage.jsp

<form:form modelAttribute="personAttribute" method="POST" action="${saveUrl}"> 

<form:checkboxes path="countries" items="${countryList}" itemValue="country_id" itemLabel="country_name" /> 

이다 생성되는 HTML

<label for="countries2">uk</label></span><span><input id="countries3" name="countries" type="checkbox" value="3"/> 

하지만 난 개인적으로 내가 어떤 가치가 최대 절전 의미 obj를 데이터 저장소의 국가에서 저장해야하는 방법 혼란 스러워요 관계 선박 표는 국가 이름이 이미 데이터베이스에 있으므로 값 또는 레이블입니다. 나는 그 ID를 저장할 필요가있다.

어떻게 매핑이 이루어지는 지 혼란스러워합니다. 나는 국가 이름을 입력하지 않기 때문에. 그들은 데이터베이스

에 이미 존재합니다.

답변

0

스프링이 객체와 폼을 바인딩 할 때, 객체를 인스턴스화합니다 (사용자가 작성한 프로세스도 플러그인 할 수 있음).

은 그래서 객체는 모든 필요한 데이터로 가득하지만 그것은이 기존의 엔티티를로드하려고 최대 절전 모드로 객체를 병합하면이 분리 된 상태에서

을 (그것은 최대 절전 모드 세션에 속하지 않는) 분리 된 오브젝트에 지정된 ID와 동일한 ID. 그러한 것이 있으면로드되고 사용됩니다.

일반적으로 일하는 방식입니다. 귀하의 경우 HTML은 국가 ID 만 제출해야하며 해당 국가는 최대 절전 모드를 통해 데이터베이스에서로드되고 사용자 개체로 설정되어야합니다.

사용자 지정 속성 편집기 등록함으로써, @InitBinder 방법으로이 작업을 수행 할 수 있습니다 - .. 국가 ID를 부여, 국가 전체 개체를로드, 하나를

0

관계 tbl에서, 그것은 룰 표준화에 따라 chkbox의 값을 저장합니다 (예 : country_id). 귀하의 @Jointable 주석으로 가져올 수 있으므로 contry 이름을 입력 할 필요가 없습니다.

+0

은 내가 모르는 무슨 문제, 테이블 person_countries 항상 빈 상태로 유지됩니다. 값이 입력되지 않았습니다. 해당 매핑에서 테이블 국가를 언급해야합니까 –

+0

파샤, 그 값이 귀하의 컨트롤러에 들어오는 지 여부를 검사하십시오. 그렇지 않다면 말해주세요. – Raman

관련 문제