我目前正在用Struts2创建一个MVC Java Web App。
我的应用程序的一个元素是通过表单搜索一些结果。当用户提交表单时,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>
我现在觉得这是一个糟糕的方法。相反,我应该将映射更改为ResultBoxRow对象列表。每个ResultBox都有自己的View Jsp,而不是一个通用的,这样我就可以遍历对象并输出,例如:
<s:iterator value="value">
<td><s:property name="firstname" /></td>
<td><s:property name="lastname" /></td>等。
在表头的情况下,我可能需要为某些头赋予单独的样式属性。我认为这些应该在JSP本身中定义,而不是让JSP引用控制器中包含该标头的样式的值。
我想我的总体问题是控制器应该在多大程度上控制视图元素的样式/显示?我觉得它应该只生成在标签中显示的单个元素,而不是要放在行的"style“标签中的值。即使这样做牺牲了一个简单的JSP来处理每个结果框。
如果能得到你的意见,那就太好了。
发布于 2013-05-29 20:58:06
控制器应该与显示机制无关:这就是MVC的意义所在,将数据与其表示完全分离。
你仍然可以通过自定义标签、包含、模板等来干燥视图层。样式可以作为属性传递,而底层的DOM将由单个页面或模板创建。
你想要传递的属性的性质也很重要。如果它们是语义的,那么在逻辑上可以从模型或控制器中获得。如果它们纯粹是表现性的,比如颜色、宽度等,那么它与模型或控制器没有任何关系。
https://stackoverflow.com/questions/16812563
复制相似问题