Теги Spring 5 <form>(вход, выбор и т. Д.) Не отображают значение из модели - PullRequest
0 голосов
/ 27 октября 2018

Я обновляю веб-приложение с SPring 2.5 до Spring 5. Мой контроллер показывает здесь заполненный объект модели;

@RequestMapping(value = "/es/orderinfo.html", method = RequestMethod.GET)
public ModelAndView initForm(
        @RequestParam("id") long id,
        HttpServletRequest request){


    Order order = getDAOFactory().getOrderDAO().load(id);

    OrderInfoBean bean = new OrderInfoBean();
    bean.setOrder(order);


    ModelAndView mv = new ModelAndView("es/orderinfo", "command", bean);
    return mv;

}

И в моем JSP, если я помещу опечатку в путь выбора, я получаю ошибку времени выполнения, указывающую, что среда выполнения Spring правильно проверила мой объект команды. Правильный путь выглядит так:

<form:select path="order.orderType"
        tabindex="100" cssStyle="width:149px">
        <form:option value="">none</form:option>
        <form:options items="${refData.orderTypes }" itemValue="id" itemLabel="typeName" />                                 
</form:select>

... НО через 15 часов значения модели не используются ни в каких полях ввода, текстовых областях, входах, выборках ... ... так что каким-то образом существует разрыв между функцией контроллера GET mapped, которая предоставление заполненного formBackingObject (Model) и JSP, который видит этот класс / тип, но не получает данные. КСТАТИ справочные данные (например, refData.order.Types) поступают в JSP нормально ...

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Эта идея добавления .id к пути фактически нарушает последующую запись с точки зрения полной загрузки и объединения типов сложной модели (см. Новые форматеры (после весны 3) и старые редакторы и так далее). Правильное решение - добавить функции равенства и хэш-кода в класс CapType следующим образом:

 @Override
    public boolean equals(final Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        final CapType capType = (CapType) o;
        return Objects.equals(id, capType.id) &&
        Objects.equals(typeName, capType.getTypeName());
    }
   @Override
   public int hashCode() {
       return Objects.hash(id, typeName);
   }

Спасибо за подсказку отсюда http://springinpractice.com/2012/01/07/making-formselect-work-nicely-using-spring-3-formatters

0 голосов
/ 27 октября 2018

holi.scheiserama это работает:

<form:select path="order.orderType.id"
    tabindex="100" cssStyle="width:149px">
    <form:option value="">none</form:option>
    <form:options items="${refData.orderTypes }" itemValue="id" itemLabel="typeName" />                                 
</form:select>

(момент мыльной опасности ...), поэтому мне кажется, что тег формы Spring с пользовательскими типами работает по-другому (5.0.3 против 2.5), было бы неплохо узнать 16 часов назад ... надеюсь что помогает, используйте путь к id ....

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