【发布时间】:2019-06-28 07:44:10
【问题描述】:
编辑:此问题似乎与 Firefox 无关 - 在 Chrome/IE 中,它的工作方式与预期完全一致。这是一个 Firefox 错误,还是只是我不理解的东西?
我有一个弹簧表。除其他外,该表单包含一个<select> 元素,它使用JSP 中的“路径”属性绑定到ModelMap 中的相应元素。
但是,<select> 元素的表观值不会在软页面刷新时更新,即使模型映射中的值发生更改。对模型值的其他引用会更新(例如,如果我只是添加 ${MyModelMapValue } - 那么该值将在软刷新时更新 - 因此不会发生缓存或任何事情)。
硬刷新 (CTRL+F5) 后,选择更新。如何在软刷新时更新选择?
用例:
我第一次浏览到该页面,我看到正确绑定到表单字段的正确值 - 包括我的
<select>元素 - 它绑定到模型映射中的一个元素,例如:MyModelMapValue = '有序'在后台(例如,其他人的浏览器)中,当我在浏览器中打开页面时,MyModelMapValue 的值会发生变化,并将该更改保存到数据库中。 MyModelMapValue = '已发货'
最初,我的选项卡中的值不会更改 - 这是我所期望的,因为这些值不会从数据库中不断更新。
现在我在浏览器中按 F5。
我可以看到生成了一个正常的 GET 调用,并点击了我的控制器,新模型正确生成(使用 MyModelMapValue = 'shipped')并与视图一起提供给浏览器。
对模型值的所有其他引用(例如 ${MyModelMapValue} 将显示为“已发货”
<select>元素仍绑定到 MyModelMapValue,但显示为“有序”作为它的值。
问题:
这是 Spring Forms 绑定的工作方式,还是我做错了什么?
代码:
Spring Form 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";
}
【问题讨论】:
标签: java spring jsp firefox spring-form