2012-05-26 2 views
1

스프링 프레임 워크와 다른 프레임 워크로 MVC 애플리케이션을 개발합니다. (그리고 저는 초보자입니다.) jsp 처리를 관리하는 컨트롤러가 있습니다. 예를 들어 새로운 사람을 '사람 목록'에 추가하고 Person 개체를 인스턴스화한다고 가정하고 add 메서드에 해당하는 JSP보기에 전달합니다. 그리고 내가 그이이 같은 방법으로 :Spring, modelmap, jsp에서 속성 가져 오기

@RequestMapping(value = "/persons/add", method = RequestMethod.GET) 
public String getAdd(Model model) { 
    logger.debug("Received request to show add page"); 

    // Create new UserDomain and add to model 
    // This is the formBackingOBject 
    model.addAttribute("personAttribute", new UserDomain()); 

    // This will resolve to /WEB-INF/jsp/addpage.jsp 
    return "addpage-tiles"; 
} 

내 문제는 지금, 내가 예를 들어, 내가 '새로운 UserDomain을 통과 할 모델 두 개의 서로 다른 객체에 추가 전달하려는 것입니다() '그리고 다른 데이터베이스의 다른 테이블에있는 다른 객체, 예를 들어'새로운 UserSecurity() '가 있습니다. 'model.addAttribute ...'대신 'modelMap'을 사용해야한다고 생각합니다.하지만이 작업을 수행 할 수 없으므로 누군가 나를 도울 수 있습니다. 내가 좋아하는 코드에 의해 JSP에서 내 모델을 얻을 :

<form:form modelAttribute="personAttribute" method="POST" action="${saveUrl}"> 
<table> 
    <tr> 
     <td><form:label path="firstName">First Name:</form:label></td> 
     <td><form:input path="firstName"/></td> 
    </tr> 
    <tr> 
     <td><form:label path="lastName">Last Name</form:label></td> 
     <td><form:input path="lastName"/></td> 
    </tr> 
    <tr> 
     <td><form:label path="userName">User name</form:label></td> 
     <td><form:input path="userName"/></td> 
    </tr> 
    <tr> 
     <td><form:label path="email">E-mail</form:label></td> 
     <td><form:input path="email"/></td> 
    </tr>   
</table> 
<input type="submit" value="Save" /> 
저를 도와 주셔서 많이 감사합니다.

+0

'모델에 문제가 있습니다.addAttribute ("userSecurity", 새로운 UserSecurity())'? –

+0

아무 것도 잘못되었지만 사실 model.addAttribute ("userSecurity", new UserSecurity());를 사용할 수 없습니다. 및 model.addAttribute ("personAttribute", 새 UserDomain()); 왜냐하면 jsp에서는

을 쓸 수 없기 때문입니다. jsp에는 하나의 modelAttribute 만 포함될 수 있습니다. – Maouven

답변

3

두 개 이상의 개체를보기로 전달하는 것은 문제가되지 않습니다. 단지 model.addAttribute을 여러 번 사용하면 두 개체에 모두 액세스 할 수 있습니다. 그런 다음보기에이의 인스턴스를 전달

public class UserDomainSecurity { 

    private UserDomain userDomain; 
    private UserSecurity userSecurity; 

    // getters and setters for both 

} 

: 당신이 <form:form> 하나 개 이상의 모델을 편집 할 경우

그러나 객체 모두를 포함하는 클래스를 만들어야합니다

<form:form commandName="userDomainSecurity" method="POST" action="${saveUrl}"> 
... 
    <form:input path="userDomain.firstName"/> 
    .... 
    <form:input path="userSecurity.someSecurityProperty"/> 

그것은 때로는 앤의 :

model.addAttribute("userDomainSecurity", new UserDomainSecurity()); 

그리고 형태로 사용 이 모든 추가 클래스를 생성해야하지만, 다소 논리적입니다. 래퍼 클래스는 폼에 네임 스페이스의 종류를 만들고 따라서 편집 할 개별 개체를 분리합니다.

0

몇 분 전에 발생했던 현재의 문제이므로 추가하고 싶습니다.

여기서는 UserSecurityUserDomain이 서로 관련 있다고 가정했습니다.

하자가

public class UserDomain { 

    public UserSecurity userSecurity 
    public String firstName; 
    public String lastName; 

    // getters and setters... 
} 

, 당신이 말을하고 같은 당신의 사용자 보안 뭔가, userSecurity 속성이 공개적으로 액세스 할 수 있기 때문에

public class UserSecurity { 

    public String someSecurityProperty; 

    // getters and setters... 
} 

, 당신은 당신이에서 한 무엇을 할 수있는 당신의 컨트롤러,

@RequestMapping(value = "/persons/add", method = RequestMethod.GET) 
public String getAdd(Model model) { 
logger.debug("Received request to show add page"); 

// Create new UserDomain and add to model 
// This is the formBackingOBject 
model.addAttribute("userDomainSecurity", new UserDomain()); 

// This will resolve to /WEB-INF/jsp/addpage.jsp 
return "addpage-tiles"; 
} 

다음 addpa에서 액세스하십시오. 그 아래 같은 개체 속성처럼

<form:form commandName="userDomainSecurity" method="POST" action="${saveUrl}"> 
... 
<form:input path="firstName /> 
<form:input path="lastname /> 
    .... 
    <form:input path="userSecurity.someSecurityProperty"/> 

, ge.jsp 당신이 통지로, 나는 UserDomain 클래스에 선언 된 재산에 의해 someSecurityProperty에 액세스 할 수 있습니다.