2012-06-15 7 views
1

Я создал приложение Spring MVC, которое отображает список элементов для пользователя - как я могу изменить порядок этих элементов в JSP, чтобы новый порядок был отправлен на сервер?Как изменить порядок элементов списка в форме?

Например, пользователь получает следующий список:

  1. Pet Cat
  2. Pet Dog
  3. Pet Bird

Список составленную с помощью этой формы:

<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> 

Я включил некоторые Javas cript, который позволяет пользователю перетаскивать строки в списке, например. перемещая линию Dog над линией Cat.

Как сообщить об этом серверу? (как я могу перестроить модель petList из полей формы?) Теперь я могу прочитать список на сервере после отправки формы, но элементы списка поступают в исходном порядке, даже если я изменяю имена в форме (например, Cat -> Мышь)

ответ

1

Это потому, что они, естественно, упорядочены по их первичному ключу (который является индексом), поэтому обычно это идентификатор строки.

Попробуйте добавить в таблицу «ранг» в таблице, которую вы будете обновлять после сортировки данных и упорядочения результатов по рангу.

+0

Звучит как план, но есть ли способ изменить «ранг» из javascript (когда элемент списка перетаскивается)? Или мне нужно поселиться в цифровом поле старой школы в форме? – wannabeartist

+0

Конечно, есть способ переместить вещи в javascript, но как, черт возьми, вы должны сохранить заказ? Возможно, вы захотите поменять местами элементы в списке в базе данных bu, что для меня действительно не очень хорошая идея. –

1

Вам необходимо сохранить информацию о заказе в своем слое сопротивления. Делая это, вам нужно будет вызвать вызов (javascript ajax call для примера) каждый раз, когда вы изменяете заказ. Этот вызов должен отправить запрос серверу приложений, который будет вызывать соответствующий сервис, чтобы обновить ваш уровень устойчивости для этого списка.

Затем вам необходимо будет адаптировать ваш уровень сопротивления, чтобы заказать список с информацией о ранжировании, которую вы сохраняли ранее, когда наступает момент, чтобы отобразить вашу страницу.

Я думаю, что это самый эффективный способ.

Удачи вам!

+0

Хм, имеет смысл. Я думаю, что моя проблема связана с моим желанием изменить список сразу (добавить, удалить элементы и изменить их порядок ->, а затем сохранить новый список за один раз). Кажется, что на самом деле нет никакого другого разумного способа, чем обрабатывать каждое изменение отдельно. – wannabeartist

+0

Вот что вы можете сделать. При каждом событии, которое происходит в вашем списке, вы вызываете вызов на ваш сервер приложений. Этот вызов будет содержать ваше полное состояние списка, и ваш уровень сопротивления будет просто перезаписывать все каждый раз. Таким образом, одна операция в вашем списке будет обрабатывать каждую возможность. –

Смежные вопросы