2011-06-29 111 views
1

我不確定這是否可行,但我需要對Spring MVC做一些奇怪的綁定。我們必須動態生成一個頁面,這是運行一些報告的先驅。不同的報告將具有不同的標準,這些標準可用於限制報告中顯示的數據。Spring MVC綁定

我希望我可以做這樣的事情:

public interface ReportingStrategy extends Serializable { 
    public String getReportingCriteria(); //Each subclass will generate the SQL needed 
} 

public class DateLimitingStrategy implements ReportingStrategy { 

    private Date startDate; 
    public Date getStartDate() { return startDate; } 
    public void setStartDate(Date startDate) { this.startDate = startDate; } 

    private Date endDate; 
    public Date getEndDate() { return endDate; } 
    public void setEndDate(Date endDate) { this.endDate = endDate; } 

    public String getReportingCriteria() { 
     //Generate SQL for date range (where necessary) 
    } 
} 

public class SortingStrategy impelements ReportingStrategy { 
    public String sortValue; 
    public String getSortValue() { return this.sortValue; } 
    public void setSortValue(String sortValue) { this.sortValue = sortValue; } 
} 

所以這似乎是一個非常簡單的想法。

在我的控制器端,我希望能夠綁定到這些帖子上的列表。我能夠生成應該使這個必要的HTML,但綁定不能正常工作。這是我的控制器的基礎:

@RequestMapping(method = RequestMethod.GET) 
public ModelAndView(@RequestParam("reportName") String reportName) { 
    ModelAndView mav = new ModelAndView("showReportingStrategies"); 
    mav.addObject("backingObject", new BackingObject(reportName)); 
    return mav; 
} 

@RequestMapping(method = RequestMethod.POST) 
public ModelAndView(@ModelAttribute("backingObject") BackingObject bo, BindingResult result) { 
    //More logic here 
} 

public class BackingObject implements Serializable { 
    private List<ReportingStrategy> reportingStrategies; 
    public void setReportingStratgies(List<ReportingStrategy> reportingStrategies) { 
     this.reportingStrategies = reportingStrategies; 
    } 
    public List<ReportingStrategy> getReportingStrategies() { return this.reportingStrategies; } 
} 

這甚至可能通過擴展PropertyEditorSupport和InitBinder魔術?

+0

報告策略的類型在頁面加載時是已知的,還是用戶選擇它們? – Affe

+0

他們將被稱爲,只是在該報告中動態A可能有一個日期限制策略和報告B可能都有。 BackingObject的構造函數將在DB中查找它們(未顯示) – Scott

回答

1

最簡單的事情就是使用@SessionAttributes來將你的後臺對象放在會話中。這種方式具體類型出現在綁定時間。活頁夾不需要能夠找出ReportingStrategy的實施者使用,他們已經在那裏。當然,服務器端狀態可能會成爲一個問題,如果您在沒有webflow的情況下使用原始MVC,並且您的應用程序支持多標籤使用,則需要一如既往地處理。