Изменить: эта проблема, по-видимому, изолирована от Firefox - в Chrome / IE она работает точно так, как ожидалось. Это ошибка Firefox или я просто чего-то не понимаю?
Имею пружинную форму. Форма содержит, среди прочего, элемент <select>
, который привязан к соответствующему элементу в ModelMap с помощью свойства path в JSP.
Однако кажущееся значение элемента <select>
не обновляется при программном обновлении страницы, даже если значение в карте-модели изменяется. Другие ссылки на значение модели обновляются (например, если я просто добавлю $ {MyModelMapValue} - тогда значение будет обновляться при мягком обновлении - так что кеширования или чего-то еще не происходит).
После жесткого обновления (CTRL + F5) выберите обновления. Как я могу обновить выбор при мягком обновлении?
Пример использования:
Я впервые перехожу на страницу и вижу правильные значения, правильно привязанные к полям формы, включая мой элемент
<select>
, который привязан к элементу на карте модели, например: MyModelMapValue = 'order'В фоновом режиме (скажем, в браузере другого пользователя), пока у меня открыта страница в моем браузере, значение MyModelMapValue изменяется и сохраняет это изменение в БД. MyModelMapValue = 'отправлено'
Первоначально значения на моей вкладке не меняются - чего я и ожидал, поскольку значения не обновляются постоянно из БД.
Теперь я нажимаю F5 в своем браузере.
Я вижу, что сгенерирован нормальный вызов GET и попадает в мой контроллер, новая модель правильно сгенерирована (с MyModelMapValue = 'shipped') и обслуживается вместе с представлением в браузере.
Все другие ссылки на значение модели (например, $ {MyModelMapValue} будут отображаться как "отправлено"
элемент
<select>
по-прежнему привязан к MyModelMapValue, но в качестве значения отображается «упорядоченный».
Вопрос:
Так ли должна работать привязка Spring Forms, или я что-то делаю не так?
Код:
Spring Form JSP definition:<form:form commandName="productHolder" id="productForm" method="post">
<form:input path="product.blah" placeholder="blah" class="blah-blah" />
<br>
... a bunch of other fields ...
<br>
Supplier Status:
<form:select path="product.supplierStatusObjectFromListOfStatusObjects.currentSatus">
<form:options items="${allProductSupplierStatuses}"/>
</form:select>
<br>
Printing the value as a test: ${product.getSupplierStatusFromListOfStatusObjects.currentSatus}
<br>
<button class="btn btn-success" type="submit">Save</button>
</form:form>
Stripped back Java Controller:
@RequestMapping(method=RequestMethod.GET)
public String showProductStatusScreen(ModelMap model, @RequestParam(value = "productId", required=false) Long productId){
this.checkAccess(this.getCaller());
Product product = productBusinessObject.getProductById(productId);
ProductHolder productHolder = this.generateProductHolder(product);
model.put("productHolder", productHolder);
//printing it out as a test:
System.out.println(productHolder.GetProduct.getSupplierStatusObjectFromListOfStatusObjects.getCurrentSatus);// <- Prints out the correct value
return "/WEB-INF/jsp/productStatusScreen.jsp";
}