2013-11-14 1 views
2

Spring @MVC (MVC 어노테이션이있는)를 사용하여 프로젝트를 개발 중입니다.Spring @MVC를 사용하여 요청에서 여러 Bean을 채우는 방법

모든 요청 매개 변수가 단일 빈에 채워 져야한다면 모든 것이 잘된 것처럼 보이지만 여러 POJO는 어떨까요?

나는 웹을 검색했으며 양식지지 개체를 알고 있었지만 @MVC (주석 기반)에서 어떻게 사용할 수 있습니까?

또 다른 질문 : 각 양식에 대해 빈을 구성해야합니까? 스트럿츠의 ActionForm s처럼 보이지 않습니까? 이 객체를 생성하지 못하도록 방지 할 수 있습니까?

모든 콩을 Map에 넣고 스프링 바인더에 채우기를 요청하는 방법이 있습니까? 뭔가 같은 :

map.put("department", new Department()); 
map.put("person", new Person()); 

그래서 department.name 및 부서 콩에 department.id 바인딩 및 person.name, person.sex하고 ... 그 사람 빈에서 채울? (따라서 컨트롤러 메서드는 Map을 매개 변수로 사용합니다.)

+0

. 그 문자열은 실제로 당신이 맵을 사용할 필요가 있고 실제로 bean을 생성 할 수없는 시간을 실제로 실행합니까? – Affe

+0

그럼 각 요청 유형마다 빈을 만들어야하나요? –

+0

통조림 바인더 스택은 전체 양식이 하나의 개체에 매핑 될 때 가장 만족 스럽습니다. 각 요청에 대한 사용자 정의 맵을 생성하는 대신 객관적으로 더 나은 방법은 무엇인지 명확하지 않습니다. – Affe

답변

0

PersonDepartment이라는 참조 번호를 지정하면 쉽게 처리 할 수 ​​있습니다. 당신은 문맥에서 Person 빈을 가져오고을 렌더링하는 컨트롤러를 만들 수 있습니다

@Component 
@Scope("prototype") 
public class Person { 
    private String firstName; 

    private Department department; 

    public Department getDepartment() { 
     return department; 
    } 
    public void setDepartment(Department department) { 
     this.department = department; 
    } 
    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
} 

: 사람이 부서에서 작동하는 경우 응용 프로그램에서,이처럼 Person 클래스에 Has-A 관계를 논리적 될 것입니다 전망.

@Controller 
public class TestController implements ApplicationContextAware{ 

    private ApplicationContext appContext; 

    @RequestMapping(value="/handleGet",method=RequestMethod.GET) 
    public String handleGet(ModelMap map){ 
     map.addAttribute("person", appContext.getBean("person")); 
     return "test"; 
    } 
    @RequestMapping(value="/handlePost",method=RequestMethod.POST) 
    public @ResponseBody String handlePost(@ModelAttribute("person") Person person){ 
     return person.getDepartment().getDepartmentName(); 
    } 

    @Override 
    public void setApplicationContext(ApplicationContext appContext) 
      throws BeansException { 
     this.appContext=appContext; 
    } 
} 

는 그런 다음 JSP 내에서이 같은 것을 쓸 수 있습니다보기 : 특히 잘 아니, 오른쪽 상자에서 지원되지 않는

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Test</title> 
</head> 
<body> 
    <sf:form commandName="person" action="/appname/handlePost.html" method="post"> 
     <sf:input path="firstName"/> 
     <sf:input path="department.departmentName"/> 
     <sf:button name="Submit">Submit</sf:button> 
    </sf:form> 
</body> 
</html> 
2

양식지지 개체가 필수는 아니지만 @RequestParam 주석을 사용하여 양식 값을 직접 얻을 수 있습니다. Binding request parameters to method parameters with @RequestParam on Spring Manual을 참조하십시오.

지도가 기본 스프링 MVC 유형 변환기에서 지원되는 것으로 생각하지 않지만 사용자 지정 변환기를 등록 할 수 있습니다. Customizing WebDataBinder initialization을 참조하십시오.

+1

'@ RequestParam'을 사용하고 있지 않습니다. 석기 시대로 거슬리는 문자열입니까? –