【问题标题】:Spring MVC upload file and send parsed data backSpring MVC 上传文件并将解析后的数据发回
【发布时间】:2012-01-12 11:49:22
【问题描述】:

我正在为我的 Web 应用程序使用 Spring MVC。我正在实现文件上传功能。按照教程,我能够通过“文件”输入类型的提交操作将上传的文件发送到服务器。然后我在服务器端解析了上传的 xls 文件,需要将解析后的数据(3 个自定义对象列表)发送回同一个表单以显示。我通过 ModelAttribute 发回了数据。

但是,我现在的问题是,在客户端,我需要在我的 javascript 中使用这些自定义对象列表,但我只能通过 jstl 标签库检索自定义对象的每个字段,但我无法获取这些自定义对象在我的 javascript 中,我需要它们用于其他逻辑实现。

然后我尝试了一个Ajax文件上传插件,因为ajax调用可以返回JSON响应哪些对象可以在Javascript中使用。但无法让插件正常工作。

我被这个问题困扰了好几天>.

【问题讨论】:

    标签: java javascript ajax spring model-view-controller


    【解决方案1】:

    有什么理由不能简单地将模型对象“扁平化”为 HTML,然后使用 DOM API 从 Javascript 访问它们?

    您说您返回 3 个自定义对象列表。那么对于每个列表,如何构建一个(隐藏的)HTML 表,例如,如果您在名为 people 的 ModelAttribute 中有一个 Person 对象列表:

    <table id="people-table">
      <c:forEach var="person" items="${people}">
        <tr id="${person.id}>
          <td class="person-name">${person.name}</td>
          <td class="person-age">${person.age}</td>
          <td class="person-height">${person.height}</td>
        </tr>
      </c:forEach>
    </table>
    

    现在在您的 Javascript 中,您遍历 people-table 中的行,做任何您需要做的事情 - 例如使用 jQuery:

    $("#people-table tr").each(
        var personId = $(this).attr("id");
        var personName = $(this).find("td.person-name").text();
        // etc, etc
        // Do something with these as required
    );
    

    这可能不是最优雅的解决方案,但至少它很容易调试 - 您可以随时使用 Firebug 等检查 table 以查看数据是否正确,然后您将知道是否继续调试服务器端或在 Javascript 中。

    【讨论】:

    • 非常感谢您的回复,磨坊!我同意将模型对象展平为 HTML 是一种易于实现和调试的方法。我对这种方法的唯一担心是,这将在 HTML 中显示我的一些业务逻辑,任何人都可以从网页源代码中查看这些逻辑。如果我的对象的字段是用 javascript 分配的,那就太好了。
    • 您总是可以从 DOM 中删除 table 作为 Javascript 处理的最后一步!?! :-)
    • 是的,删除“表”就可以了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2013-07-04
    • 2012-06-16
    • 2011-01-24
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多