2013-11-14 75 views
2

我正在使用Spring @MVC(使用MVC註釋)開發項目。如何使用Spring @MVC在請求中填充多個bean

如果所有的請求參數都應該被填充到一個單獨的bean中,一切似乎都很好,但是多個POJO呢?

我已經在網上搜索和所知的形式,後備對象,但我怎麼能在@MVC使用它們(註釋爲基礎的)?

另一個問題:我應該爲每個表單構造一個bean嗎?難道它看起來不像Strut的ActionForm?無論如何阻止創建這些對象?

有沒有辦法把所有的bean都放到一個Map中並且要求Spring binder來填充它們?喜歡的東西:

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

所以department.namedepartment.id綁定到部門豆和person.nameperson.sex和...填充在人豆? (所以控制器方法接受Map作爲其參數)。

+0

那不是特別好支持開箱的,沒有。這些字符串真的是真的運行時間,你需要使用地圖,不能只創建一個bean? – Affe

+0

那麼,我應該爲每個請求類型創建一個bean嗎? –

+0

當整個表單映射到單個對象時,固定的活頁夾堆棧是最幸福的。對於我來說,不知道爲什麼必須爲每個請求定製構造映射,而不是客觀上更好:) – Affe

回答

0

如果你給Person參考Department那麼它會很容易。在您的應用程序,如果一個人在一個部門工作,將是合乎邏輯的創建這樣在您的Person類一個Has-A關係:

@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豆和渲染視圖。

@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> 
相關問題