【问题标题】:Spring MVC: Creating View within Controller RuntimeSpring MVC:在控制器运行时创建视图
【发布时间】:2014-11-05 21:24:09
【问题描述】:

我有一个编写 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 并从中创建视图的,可能通过将两者绑定在一起,因此当提交视图时,模型会更新,并且数据库中的原始 XML 会发生更改。至少这是我当前的解决方案对 Servlet 所做的。我想用 Spring MVC 做同样的事情。动态视图创建。比如:

AbstractView.jsp

 <_html>
        <_body>
            <_form ...>
                <_div><!-- Load dynamically generated content here... --></_div>
            </_form>
        <_/body>
    </_html>

另一种方法如下所示。我有一个 abstractview jsp 文件,它为所有可能的视图定义了公共部分。这基本上就是除了完全动态的实际内容之外的所有内容。

【问题讨论】:

  • 澄清一下,您想在每次调用控制器中的特定方法时从标准布局构建自定义视图?
  • 或多或少是正确的。没有标准的布局。空无一物。用户上传一个 XML,我处理它并且必须显示它。我将用一个基本示例更新帖子。
  • 是的,请举个例子来帮助社区解决问题。
  • 添加示例。很基本,但说明了我的意图。

标签: java jsp spring-mvc


【解决方案1】:

您的用例不适合 JSP 视图。 JSP 视图用于从模型中添加数据的静态结构。你的模型对于 JSP 来说太复杂了。

对于您的示例,我会更贴近您之前的 servlet 解决方案,让控制器直接生成响应并返回 NULL 表示响应已经完成。毕竟在 servlet + JSP 架构中,servlet 通常只会将数据放入请求属性中,这些属性会显示在 JSP 中。

另一种方法是创建自定义 View + View 解析器对。但老实说,我不能说为了一点收获而写作是否会更难。我没有这方面的经验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多