Spring MVC обязательная проблема - PullRequest
1 голос
/ 23 ноября 2011

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

При создании нового уровня пользователь может просмотреть список всех этих требований и переместить эти требования в требуемую область требований (щелкнув по ним, чтобы переместить их назад и вперед от одного деления к другому). Это будет выглядеть примерно так: jsp

<div id="allRequirements">
    <c:forEach var="requirement" items="${RequirementList}">
         <div class="requirements">
             <input type="hidden" value="${requirement.id}" name="id"/>
             <h2><c:out value="${requirement.name}"/></h2>
         </div>
    </c:foreach>
</div>
<div id="requiredRequirements"></div>

RequirementList - это просто атрибут модели, который возвращает список требований

Модель для уровня и требований выглядит следующим образом:

public class Level {
    private String name;
    private int id;
    private int points
    private List<Requirement> requirements;
    ....
}

public class Requirement{
    private String name;
    private String id;
    ....
}

и метод для этого добавления функции в контроллере выглядит следующим образом

@RequestMapping(value = "/level/addNewLevel", method = RequestMethod.POST)
public String addNewLevel(@ModelAttribute("level") Level level, BindingResult result, Model model)
{
    validator.validate(level, result);
    if(result.hasErrors()) {
        //show errors
    }
    else {
        //add level
    }
}

Итак, теперь по моей проблеме:

Я могу получить имя, очки, ID и т. Д. Уровня просто отлично, но Требования не подходят вообще. Я попытался вставить <input type='hidden' value='' + id +'' name="requirements"/> в div, которые находятся в обязательных требованиях при отправке формы и сделать что-то вроде этого

String[] requiredRequirements = ((String) result.getFieldValue("requirements")).split(",");
level.setRequirements(getRequirementsFromIDs(requiredRequirements));

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

Мне было интересно, есть ли у кого-нибудь совет, как решить эту проблему.

Заранее спасибо

1 Ответ

2 голосов
/ 23 ноября 2011

Написание корректного редактора (или, лучше, Spring 3 Converter) для этой ситуации - не хак.Вот для чего нужны редакторы свойств. Так что это только решение для взлома, но не взлом для взлома.

Но есть лучший способ справиться с проблемой списка.Поскольку Spring 3 Converter для отдельных объектов, таких как (String (id) - Requirement), может быть применен к списку Requirement s с помощью Spring автоматически.Таким образом, вам нужно написать только конвертер, который может конвертировать String представление идентификатора в Requirement.Spring будет применять это и к спискам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...