Ste*_*Kuo 5 java model-view-controller spring jsp java-ee
在MVC(例如JSP和Spring)中,在控制器中查看相关代码是不好的做法吗?
在我的例子中,控制器做了一些工作,然后将结果交给视图(JSP).在状态消息的情况下,我可以将整个消息文本传递给视图,或者传递一个键,让JSP将其映射到消息文本.
例:
控制器中生成的消息
弹簧控制器:
protected ModelAndView onSubmit(...) {
Map map = new HashMap();
// Controller processing
if (...)
map.put("status", "Case 1 status message");
else
map.put("status", "Case 2 status message");
return new ModelAndView("viewPage", map);
}
Run Code Online (Sandbox Code Playgroud)
JSP:
{$status}
Run Code Online (Sandbox Code Playgroud)
在视图中生成的消息
弹簧控制器:
protected ModelAndView onSubmit(...) {
Map map = new HashMap();
// Controller processing
if (...)
map.put("status", "case1");
else
map.put("status", "case2");
return new ModelAndView("viewPage", map);
}
Run Code Online (Sandbox Code Playgroud)
JSP:
<c:choose>
<c:when test="{$status eq 'case1'}">Case 1 status message</c:when>
<c:when test="{$status eq 'case2'}">Case 2 status message</c:when>
</c:choose>
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,控制器和JSP代码更简单,但控制器中存在与视图相关的逻辑.在第二种情况下,所有视图逻辑都在JSP中,但代码并不那么简单.
我是否通过在控制器中生成消息文本来违反MVC范例?这种情况的常见做法是什么?
在 MVC 中组合 UI 和控制器代码是富客户端(例如在 Swing 中)的常见做法。即使在 Web MVC 中,有时也会为了非常简单的响应而实现它。
但就您而言,不建议您所做的事情。通常,您使用 spring 的MessageSource机制将应用程序的文本放入资源包中,并仅使用代码引用它。资源包是一个简单的属性文件,在您的情况下,它将如下所示:
case1=Case 1 status message
case2=Case 2 status message
Run Code Online (Sandbox Code Playgroud)
<spring:message message="${status}"/>
Run Code Online (Sandbox Code Playgroud)
资源包有两个优点: