Spring Forms: элемент Select. Когда значение 'path' обновляется, после выбора все еще остается прежнее значение select. - PullRequest
0 голосов
/ 04 февраля 2019

Редактировать : Эта проблема, по-видимому, изолирована от Firefox - в Chrome / IE она работает точно так, как ожидалось.Это ошибка в Firefox или я чего-то не понимаю?

У меня есть пружинная форма.Форма содержит, помимо прочего, элемент <select>, который связан с соответствующим элементом в ModelMap с использованием свойства path в JSP.

Однако видимое значение элемента <select> не обновляется при обновлении мягкой страницы, даже если значение в карте модели изменяется.Другие ссылки на значение модели обновляются (например, если я просто добавлю $ {MyModelMapValue} - тогда значение будет обновляться при мягком обновлении - поэтому кэширование или что-либо еще не происходит).

После жесткого обновления (CTRL + F5) выбранные обновления.Как я могу обновить выбор при мягком обновлении?

Вариант использования:

  • Я впервые захожу на страницу и вижу правильные значения, привязанные к полям формы - включая мой элемент <select> -который привязан к элементу на карте модели, скажем: MyModelMapValue = 'упорядоченный'

  • В фоновом режиме (скажем, кто-то еще использует браузер), пока у меня страница открыта в моем браузере,значение MyModelMapValue изменяется, и сохраняется это изменение в БД.MyModelMapValue = 'shipped'

  • Первоначально значения не меняются на моей вкладке - что и следовало ожидать, так как значения не обновляются непрерывно из БД.

  • Теперь я нажал F5 в своем браузере.

  • Я вижу, что генерируется нормальный вызов GET, и он попадает в мой контроллер, новая модель генерируется правильно (с MyModelMapValue = 'shipped') и подается вместе с видом в браузер,

  • Все остальные ссылки на значение модели (например, $ {MyModelMapValue} будут отображаться как «отправленные»

  • элемент <select> по-прежнемупривязан к MyModelMapValue, но показывает «упорядоченный» в качестве значения.

Вопрос:

Так ли должна работать привязка Spring Forms или я что-то делаюне так?

Код:

Определение JSP пружинной формы:
<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>
Удаленный Java-контроллер:
@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"; 
}

1 Ответ

0 голосов
/ 04 февраля 2019

Ответьте на случай, если кто-нибудь будет гуглить то же, что и я в будущем ...

Это действительно проблема браузера - и вообще ничего общего с Spring Forms.Сначала я был слишком далеко от абстракции, чтобы понять.

Он уже работал по умолчанию в chorome (v71) / IE (11), только firefox (v64.0) вел себя странно.

Firefox сознательно не обновляет свойство selected="selected" выбранного в данный момент элемента option.Похоже, это для автоматического заполнения полей.Это особенность, а не ошибка.

Быстрое решение состояло в том, чтобы просто добавить свойство autocomplete="off" к элементу select - что отключает это поведение в текущей версии Firefox, например:

<select id="myBindingPath" name="myBindingPath" autocomplete="off"> 
    <option value = "fizz">fizz</option>
    <option value = "buzz">buzz</option>
    <option value = "bang" selected="selected">bang</option>
</selected>

Но кто знает, как в будущемверсии firefox будут обрабатывать autocomplete = "off" - так что это не самое надежное решение в мире.Я мог бы также написать Javascript для обновления элемента при загрузке страницы - что, вероятно, было бы более надежным решением.

Ссылки: 1 , 2

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