Model view controller MVC的视图组件。我应该在控制器中为视图预生成HTML标记元素吗?

Model view controller MVC的视图组件。我应该在控制器中为视图预生成HTML标记元素吗?,model-view-controller,view,struts2,Model View Controller,View,Struts2,我目前正在用Struts2创建一个MVC Java Web应用程序 我的应用程序的一个元素是通过表单搜索一些结果。当用户提交表单时,操作将从数据库获取必要的值并填充映射: Map<Integer,List<String>> values = new HashMap<Integer,List<String>>(); Map values=newhashmap(); 其中包含每行的列值列表 通过采用这种方法,我可以使用通用JSP来显示任何resul

我目前正在用Struts2创建一个MVC Java Web应用程序

我的应用程序的一个元素是通过表单搜索一些结果。当用户提交表单时,操作将从数据库获取必要的值并填充映射:

Map<Integer,List<String>> values = new HashMap<Integer,List<String>>();
Map values=newhashmap();
其中包含每行的列值列表

通过采用这种方法,我可以使用通用JSP来显示任何resultbox的结果:

<s:div cssClass='resultContainer'
cssStyle=' min-height: 150px; max-height:%{header}px; overflow: auto; %{display}; '
theme="qxhtml">


<table id='resultTable'>
    <tr id='tableHeader'>
        <s:iterator value="headers">
            <th><s:property /></th>
        </s:iterator>
    </tr>
    <s:iterator value="values">
        <tr class='results'>
            <s:iterator value="value">
                <td><s:property escape="false" /></td>
            </s:iterator>
        </tr>
    </s:iterator>
</table>

我现在觉得这是一个糟糕的方法。相反,我应该将映射更改为ResultBoxRow对象的列表。每个ResultBox都有自己的视图Jsp,而不是一个通用Jsp,允许我迭代对象和输出,例如:

<s:iterator value="value">
<td><s:property name="firstname" /></td>
<td><s:property name="lastname" /></td>

等等

对于表格标题,我可能需要为某些标题提供单独的样式属性。我觉得这些应该在JSP本身中定义,而不是让JSP从包含该头样式的控制器中引用一个值

我认为我的总体问题是控制器应该在多大程度上控制视图元素的样式/显示?我觉得它应该只生成标记中显示的单个元素,而不是放在行的“style”标记中的值。即使这确实牺牲了一个简单的JSP来处理每个结果框


如果能得到您的意见,那就太好了。

控制器应该与显示机制无关:这是MVC的要点,可以将数据与其表示完全分离

您仍然可以通过自定义标记、包含、模板等使视图层变干。样式可以作为属性传递,而基础DOM将由单个页面或模板创建


您希望传递的属性的性质也很重要。如果它们是语义的,可以从模型或控制器中逻辑地得到,那就好了。如果它们是纯粹的表象,如颜色、宽度等,那么在模型或控制器中就没有任何意义。

谢谢Dave。你把事情说得更清楚了。因此,您认为我为每个不同的ResultBox创建视图的新方法有意义吗,因为每个ResultBox的数据将从其自己的控制器创建?我想如果这些视图之间有任何明显的相似之处,那么它们可以表示为每个resultbox JSP中的子视图?@user1782673,没有具体的示例,我真的不确定您在做什么,或者试图做什么。我认为重新使用泛型视图是很好的,尽管我发现实际上这样做很少奏效,因为没有太多的东西可以用泛型表示。表是可以重用的东西之一,但我通常使用一个组件来实现这一点。将来,与表中的其他标记相比,某些标记可能具有特定的样式。我可以将这些样式/css类定义为控制器中的变量,以便视图输出,但我觉得这不符合MVC原则。因此,对于本例,我将创建一个单独的JSP硬编码resultBox的标题值,给出特定的样式/css类。@user1782673有多种方法可以实现这一点,包括传入标题样式数组,允许包含单独的标题模板,根据你的实际需要,我会考虑使用类似DISPLAG标签之类的东西。谢谢。因此,在控制器中生成这些样式/css类可能是一种正确的方法?