我有一个应用程序编写JSP / Servlets,我正在迁移到Spring MVC。一切顺利,直到遇到特定问题。我的应用程序根据节点的特殊属性显示带有文本框和文件选择器的任意XML文件。使用Servlet,我遍历了XML并基于它构建了HTML。使用Spring MVC,所有视图都是JSP,它没有这种灵活性。它非常动态,对我的需求来说是完全静态的。 如何在控制器类中使用Spring MVC动态构建视图?
示例:
<Sample>
<Field1>
<Type>String</Type> <!-- Will be a TextBox on the view -->
<Value>{@NS}</Value> <!-- NS :: Not Set -->
</Field1>
<Field2>
<Type>Nested</Type> <!-- The value tag is a nested Field!
<Value>
<Field21>
<Type>Object</Type> <!-- File Picker. The value of this node is base64 str of file -->
<Value>...</Value>
</Field21>
<Field22>
<Type>StringArray</Type> <!-- More Value tags can occur. A Plus sign on UI -->
<!-- Already set within view -->
<Value>V1</Value>
<Value>V2</Value>
...
</Field22>
...
</Value>
</Field2>
...
</Sample>
这样的XML就可以了。它可以有N个字段,可以嵌套M次。任意XML完全随机而不是静态的。没有公共部分,因此静态创建视图,因为JSP无法使用。相反,我使用Servlet创建JSP运行时,并将控件的值绑定到正确的XML节点。结果会在视图上出现这样的事情:
Field1: [------------]
Field2:
Field21: [-----------] [Browse]
Field22: [-----------]
[-----------] [+]
所以在这种情况下,我的模型是我的实际XML文档。我的控制器处理XML并从中创建视图,可能通过将两者绑定在一起,因此在提交View时,模型会更新,并且在DB中更改原始XML。至少这是我目前的解决方案对Servlets的作用。我想用Spring MVC做同样的事情。动态视图创建。类似的东西:
AbstractView.jsp
<_html>
<_body>
<_form ...>
<_div><!-- Load dynamically generated content here... --></_div>
</_form>
<_/body>
</_html>
另一种方法看起来像这样。我有一个abstractview jsp文件,它定义了所有可能视图的公共部分。除了实际内容之外,这基本上都是完全动态的。
答案 0 :(得分:0)
您的用例不适用于JSP视图。 JSP视图用于从模型添加数据的静态结构。您的模型对于JSP来说太复杂了。
对于您的示例,我会更贴近您之前的servlet解决方案,并让控制器直接生成响应并返回NULL以表示响应已经完成。毕竟,在servlet + JSP体系结构中,servlet通常只将数据放在JSP中显示的请求属性中。
另一种方法是创建自定义View + View解析器对。但老实说,我不能说为了一点点收益而写起来是不是更难。我没有这方面的经验。