Я не уверен, возможно ли это, но мне нужно сделать какое-то странное связывание с 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?