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魔術?
報告策略的類型在頁面加載時是已知的,還是用戶選擇它們? – Affe
他們將被稱爲,只是在該報告中動態A可能有一個日期限制策略和報告B可能都有。 BackingObject的構造函數將在DB中查找它們(未顯示) – Scott