2010-01-27 6 views
2

내가이 두 테이블 : 내가 2 테이블을 매핑하는 최대 절전 모드 사용스프링 MVC : select 태그

message(id, name, content, channel_number) // channel_number is foreign key 
channel(number, name) // number is primary key 

자바 클래스

public class Message { 

private Integer id; 
private String name; 
    private String content; 
private Channel channel; 
} 

public class Channel { 

private Integer number; 
private String name; 
} 

최대 절전 모드 설정

<class name="Message" table="message"> 
    <id name="id" column="id"> 
    <generator class="native" /> 
    </id> 
    <property name="name" column="name" /> 
    <property name="content" column="content" /> 
    <many-to-one name="channel" column="channel_number" not-null="true" /> 
</class> 

<class name="Channel" table="channel"> 
    <id name="number" /> 
    <property name="name" /> 
</class> 

에서 봄, 나는 메시지를 만들거나 편집 할 수있는 형식을 가지고있다. 채널을 선택할 수있는 선택 상자가 있습니다. 그래서, 내가

<form:form commandName="message" method="post" action="messageForm.htm"> 
    ... 
    <form:select path="channel" items="${channelList}" itemValue="number" itemLabel="name"/> 

</form:form> 

난 아무것도 일어나지 제출 누르면, 그것은

(나는이 선택을 추가하기 전에 모든 것이 잘 작동) JSP 페이지 & onSubmit 방법없이 리디렉션에 아직 뷰에서 컨트롤러 & 쇼에 모든 채널을로드

답변

0

양식을 통해 전달하는 모든 값은 문자열 또는 정수 여야합니다. 양식에 채널 객체를 제출할 수 없습니다. 다른 이유는 요청으로부터 객체를 가져올 수 없다는 것입니다. 서블릿에서 request.getParameter()는 String을 리턴합니다.

value 속성에 할당하려는 것은 사용자가 적절한 Channel 객체를 참조하는 데 사용할 수있는 일종의 ID입니다. 숫자 일 경우 Integer 또는 String 유형의 명령 객체 속성에 매핑하면 원시 int, Integer 또는 String 표현이 될 수 있습니다. 즉, 채널은 정수 또는 문자열이어야합니다. 아마도 명확하게하기 위해 channelID로 이름을 바꾸어야합니다.

그 다음 int channelID 변수를 메시지 POJO에 넣으십시오. 컨트롤러에서 선택한 채널 ID를 사용하여 채널 객체를 만들고 해당 채널 객체를 생성 된 메시지 객체로 설정할 수 있습니다. 컨트롤러 클래스의 예를 들면, 다음과 같습니다.

Message message = (Message) command; 
    Channel channel= new Channel(); 
    channel.setChannelID(message.getChannelID()); 
    message.setChannel(channel); 

이 문제는 동일한 문제가있을 때 유용했습니다. 이 스레드는 문제를 자세히 설명합니다. http://forum.springsource.org/showthread.php?t=33825

희망 도움말.