【问题标题】:Spring MVC Enforce Required Model AttributesSpring MVC 强制执行所需的模型属性
【发布时间】:2011-10-14 14:37:15
【问题描述】:

我一直在使用 Spring MVC,并且有一个我认为一般与 MVC 相关的问题。我正在寻找一种方法来执行(或至少更好地记录)模型和特定视图之间的合同。即,每个视图都有一组必需的模型属性,但要找出这些,编写控制器的人必须阅读/理解整个 JSP(除了包含的任何标签或其他 JSP),以便他们可以适当地填充模型在返回此视图之前。或者您可以查看返回此视图的其他地方并向后工作,试图找出哪些属性是必需的,哪些是可选的。这些都不是特别吸引我。

答案是否只是过度填充模型?我不是特别喜欢这个主意。我想要的是一种在每次视图的基础上以编程方式记录(或者更好的是,强制执行)这些必需属性的方法。我在 Spring 文档中找不到任何解决此问题的内容。有没有人有任何想法或想法?

想到的一件事是为每个模块创建一个视图枚举。 Enum 中的每个常量都有视图名称和一组必需的模型属性(也可能是一组单独的可选属性)。然后控制器方法将返回此 Enum 的成员,此时可以验证模型(使用类似 model.keySet().containsAll(viewEnum.requiredAttributes()))。它仍然是一个运行时错误,但至少程序员可以查看这个 Enum 并非常清楚地看到每个视图需要哪些模型属性。

【问题讨论】:

    标签: java spring model-view-controller


    【解决方案1】:

    您还没有考虑到问题的一个方面:数据依赖约束。

    例如,如果您的 jsp 中有一个简单的 if,那么这会使整个事情变得更加复杂:

    <c:if test="${formated}" >
       <c:out value="${prefix}">
    </c:if>
    <c:out value="${value}">
    <c:if test="${formated}" >
       <c:out value="${postfix}">
    </c:if>
    

    所以总的来说,我相信没有简单的解决方案,甚至没有复杂的解决方案(我可能有一个非常复杂的解决方案。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2011-11-25
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2015-01-07
      相关资源
      最近更新 更多