2014-07-02 92 views
0

我有一個控制器用來顯示項目列表,但我找不到爲什麼@ModelAttribute方法沒有被調用。Spring:ModelAttribute不會被調用

這是我的控制器:

@Controller(value = "projectListController") 
@RequestMapping(value = "VIEW") 
public class ProjectListController { 

@Autowired 
@Qualifier("projectService") 
private ProjectService projectService; 

@RenderMapping 
public String showProjects() { 

    return "projectList"; 
} 

@ModelAttribute("projectListCount") 
public Long getProjectListCount() { 

    return projectService.getProjectListCount(); 
} 

@ModelAttribute("projectFilter") 
public ProjectFilter getProjectFilter(
     @RequestParam(value = "cur", required = false) String curString, 
     @RequestParam(value = "delta", required = false) String deltaString, 
     @RequestParam(value = "orderByCol", required = false) String orderByCol, 
     @RequestParam(value = "orderByType", required = false) String orderByType) { 

    return new ProjectFilter(curString, deltaString, orderByCol, orderByType); 
} 

@ModelAttribute("projectList") 
public List<TPrProgetti> getProjectList(
     @ModelAttribute("projectFilter") ProjectFilter projectFilter) { 

    return projectService.getProgettiList(projectFilter.getCur(), projectFilter.getDelta(), 
      projectFilter.getOrderByCol(), projectFilter.isAsc()); 
} 
} 

在其中,該方法被invokated的順序是這樣的:

  1. 模型projectListCount
  2. 模型projectList
  3. 渲染projectList

我不明白爲什麼Model projectFilter沒有被調用,被用作render方法中的參數。 我看到的是Spring更喜歡調用ProjectFilter的構造函數並通過setter設置它的字段。這個映射完成如何是另一回事...

編輯

只是爲了完成並回答了評論,這個項目是部署在Liferay的一個portlet,它使用使用Spring。

的JSP是這樣的:

<liferay-ui:search-container emptyResultsMessage="No project found" 
    orderByCol="${projectFilter.orderByCol}" orderByType="${projectFilter.orderByType}" 
    delta="${projectFilter.delta}"> 
    <liferay-ui:search-container-results total="${progettiCount}" 
     results="${projectList}"> 
    </liferay-ui:search-container-results> 

    <liferay-ui:search-container-row 
     className="it.eng.liferay.portlet.domain.TPrProgetti" keyProperty="id" modelVar="project"> 
     <liferay-ui:search-container-column-text name="Codice" property="codProg" orderable="<%= true %>" orderableProperty="codProg"/> 
     <liferay-ui:search-container-column-text name="Descrizione" property="descrizione" orderable="<%= true %>" orderableProperty="descrizione"/> 
     </liferay-ui:search-container-row> 
    <liferay-ui:search-iterator /> 
</liferay-ui:search-container> 
+0

你可以發佈你的表格嗎? – ROROROOROROR

回答

0

我只是用一個包含每一個的ModelAttribute這樣一個方法的ModelAttribute:

@ModelAttribute 
public void populateModel(Model model, 
     @RequestParam(value = "cur", required = false) String curString, 
     @RequestParam(value = "delta", required = false) String deltaString, 
     @RequestParam(value = "orderByCol", required = false) String orderByCol, 
     @RequestParam(value = "orderByType", required = false) String orderByType) { 

    model.addAttribute("progettiCount", projectService.getProgettiCount()); 
    model.addAttribute("projectFilter", projectFilter); 
    model.addAttribute("projectList", projectService.getProgettiList(projectFilter.getCur(), projectFilter.getDelta(), 
        projectFilter.getOrderByCol(), projectFilter.isAsc())); 
} 

我不很喜歡,但它的作品。

我也試過使用Spring 4.0.5的最新版本,但問題沒有改變。

+0

您的窗體中是否已經有了modelattribute projectFilter? – ROROROOROROR