0

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

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

Map<Integer,List<String>> values = new HashMap<Integer,List<String>>();

其中有每行的列值列表。

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

<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>

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

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

等等

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

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

很高兴得到你的意见。

4

1 回答 1

0

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

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

您想要传递的属性的性质也很重要。如果它们的语义可以从模型或控制器中逻辑上得到,那很好。如果它们纯粹是展示性的,比如颜色、宽度等,那么它与模型或控制器无关。

于 2013-05-29T12:58:05.740 回答