编辑:这个问题似乎与firefox无关-在chrome/ie中,它完全按照预期工作。这是firefox的bug,还是我不明白的东西?
我有Spring模型。表单中包含 <select>
元素-它使用jsp中的“path”属性绑定到modelmap中的相应元素。
然而 <select>
元素的外观值不会在软页面刷新时更新,即使模型Map中的值发生更改。对模型值的其他引用也会更新(例如,如果我只添加${mymodelmappvalue},那么该值将在软刷新时更新,因此不会发生缓存或任何事情)。
硬刷新(ctrl+f5)后,选择更新。如何在软刷新时更新select?
用例:
我第一次浏览到这个页面时,看到了正确绑定到表单字段的正确值—包括我的 <select>
元素-绑定到模型Map中的元素,例如:mymodelmapvalue='ordered'
在后台(例如,其他人的浏览器),当我在浏览器中打开页面时,mymodelmappvalue的值会更改,并将更改保留到db中。mymodelmapvalue='已发货'
最初,这些值在我的选项卡中不会更改—这是我所期望的,因为这些值不会从db中不断更新。
现在我在浏览器中按f5。
我可以看到一个正常的get调用被生成,并点击我的控制器,新模型被正确生成(mymodelmappvalue='shipped'),并与视图一起提供给浏览器。
对模型值的所有其他引用(例如${mymodelmapvalue})将显示为“shipped”
这个 <select>
元素仍然绑定到mymodelmapvalue,但将“ordered”显示为其值。
问题:
这是spring表单绑定的工作方式,还是我做错了什么?
代码:
spring窗体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条答案
按热度按时间ej83mcc01#
如果以后有人用谷歌搜索我做过的事情。。。
这确实是一个浏览器问题,与spring表单完全无关。我只是太多的抽象的步骤远,以实现一开始。
它已经在chorome(v71)/ie(11)中默认工作了,只有firefox(v64.0)表现得很奇怪。
firefox故意不刷新
selected="selected"
当前选定对象上的属性option
元素。似乎这是为了让字段自动完成。这是一个特性,而不是一个bug。快速解决方法是简单地添加
autocomplete="off"
财产select
元素-在当前版本的firefox中禁用此行为,例如:但谁知道未来版本的firefox将如何处理autocomplete=“off”—所以它不是世界上最强大的解决方案。我还可以编写javascript来更新页面加载时的元素,这可能是一个更健壮的解决方案。
链接:1,2