【问题标题】:How to alter order of list items in a form?如何更改表单中列表项的顺序?
【发布时间】:2012-06-15 12:04:33
【问题描述】:

我制作了一个 Spring MVC 应用程序,它向用户显示项目列表 - 我如何在 JSP 中更改这些项目的顺序,以便将新订单提交到服务器?

例如,用户得到以下列表:

  1. 宠物猫
  2. 宠物狗
  3. 宠物鸟

列表由以下表格组成:

<form:form action="/modifypetlist.do" method="POST" modelAttribute="petList">
  <fieldset>
    <div>
      <ul id="sortable">
        <c:forEach items="${petList.list}" varStatus="vs">
          <li class="ui-state-default">
           <form:label path="list[${vs.index}].pet">Pet</form:label>
           <form:input path="list[${vs.index}].pet" />
          </li>
       </c:forEach>
      </ul>
     </div>
     <input type="submit" value="send">
   </fieldset>
</form:form>

我已经包含了一些 Javascript,使用户能够拖放列表中的行,例如将 Dog 线移到 Cat 线上方。

如何将此信息传达给服务器? (如何从表单字段重建 petList 模型?)我目前可以在提交表单后读取服务器中的列表,但列表项按原始顺序排列,即使我更改了表单中的名称(例如 Cat --> 鼠标)

【问题讨论】:

    标签: javascript jsp spring-mvc


    【解决方案1】:

    这是因为它们自然是按主键(即索引)排序的,所以通常是行的 id。

    尝试在表格中添加一个“排名”字段,一旦对数据进行排序并按排名对结果进行排序,您将更新该字段。

    【讨论】:

    • 听起来像是一个计划,但是有没有办法改变 javascript 的“排名”(当列表项被拖动时)?还是我必须接受表单中的老式数字字段?
    • 当然有一种方法可以在 javascript 中移动东西,但是你到底应该如何保留订单?您可能想尝试交换数据库中列表中项目的 ID,但这对我来说确实不是一个好主意。
    【解决方案2】:

    您需要在持久层中持久化订单信息。通过这样做,您将需要在每次修改订单时触发一个调用(例如一个 javascript ajax 调用)。此调用应向应用服务器发送请求,后者将调用适当的服务来更新该列表的持久层。

    然后,您还需要调整您的持久层,以便使用您之前在显示页面时保留的“排名”信息对列表进行排序。

    我想这是最有效的方法。

    祝你好运!

    【讨论】:

    • 嗯,有道理。我认为我的问题源于我希望立即修改列表(添加、删除项目并更改它们的顺序 -> 然后一次性保存新列表)。除了单独处理每个更改之外,似乎真的没有其他明智的方法了。
    • 您可以执行以下操作。在列表中发生的每个事件上,您都会触发对应用程序服务器的调用。该调用将包含您的整个列表状态,并且您的持久层每次都会覆盖所有内容。这样一来,您列表中的一个操作就可以处理所有可能性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2022-12-04
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多