【问题标题】:Spring MVC BindingSpring MVC 绑定
【发布时间】:2011-06-29 18:52:46
【问题描述】:

我不确定这是否可行,但我需要对 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 魔法来实现吗?

【问题讨论】:

  • 在页面加载时是否已知报告策略的类型,或者是用户选择它们?
  • 它们将是已知的,只是动态的,报告 A 可能有一个日期限制策略,而报告 B 可能两者都有。 BackingObject 的构造函数将在 DB 中查找它们(未显示)

标签: java spring data-binding spring-mvc


【解决方案1】:

最简单的方法是使用@SessionAttributes 将您的支持对象放在会话中。这样,具体类型在绑定时就出现了。活页夹不需要能够弄清楚要使用 ReportingStrategy 的哪个实现者,它们已经在那里了。当然,服务器端状态可能对您来说是个问题,如果您使用的是没有 webflow 的原始 MVC,并且您的应用程序支持多选项卡使用,那么您需要像往常一样处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多