我不确定这是否可能,但我需要用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魔术来实现呢?
发布于 2011-06-30 04:01:21
最简单的方法就是使用@SessionAttributes将你的支持对象放到会话中。这样,具体的类型就会在绑定时出现。绑定器不需要能够确定要使用哪个ReportingStrategy实现器,它们已经在那里了。当然,服务器端的状态对你来说可能是一个问题,如果你使用的是没有webflow的原始MVC,并且你的应用程序支持多选项卡使用,你需要一如既往地处理它。
https://stackoverflow.com/questions/6525716
复制相似问题