Spring form:select 表单提交时未调用转换器
Spring form:select not calling converter on form submit
我有一个非常奇怪且相当不一致的问题,我不确定是什么导致了它。我正在将表单中的所有下拉菜单从非 Spring select 更改为 form:select,因为我发现它们更清晰、更简单。这是我的旧方法,它正确调用了 strengthUnit 转换器,因此为我的控制器提供了一个非空对象:
<select name="strengthUnit" path="strengthUnit.name" id="strengthUnit">
<option value="0" ${orderedMed.strengthUnit eq null ? 'selected' : ''}></option>
<c:forEach items="${strengthUnits}" var="strengthUnitSingle">
<option value="${strengthUnitSingle.id}" ${orderedMed.strengthUnit.name eq strengthUnitSingle.name ? 'selected' : ''}>${strengthUnitSingle.name}</option>
</c:forEach>
</select>
我已将这段代码更改为下面的代码,现在转换器未被调用,当它到达控制器时对象为 null :
<form:select name="strengthUnit" path="strengthUnit.id" id="strengthUnit">
<form:option value="0" label=""></form:option>
<form:options items="${strengthUnits}" itemLabel="name" itemValue="id"/>
</form:select>
更奇怪的是这个特定的实体类型附加到 2 个不同的实体并且 form:select 标签在另一个页面中工作!两个 JSP 都有此行:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
这是在配置 class 中正确注册并使用第一种方法工作的 strengthUnitConverter class' 转换方法:
@Override
public StrengthUnit convert(String id)
{
return strengthUnitService.findById(Integer.parseInt(id));
}
谢谢!
找到问题了! path 属性需要指向实体本身而不是它的 ID :
<form:select name="strengthUnit" path="strengthUnit" id="strengthUnit">
<form:option value="0" label=""></form:option>
<form:options items="${strengthUnits}" itemLabel="name" itemValue="id"/>
</form:select>
我以为它在我的其他页面上有效,但今天早上发现我错了。更正路径后,我不再获得空对象。
我有一个非常奇怪且相当不一致的问题,我不确定是什么导致了它。我正在将表单中的所有下拉菜单从非 Spring select 更改为 form:select,因为我发现它们更清晰、更简单。这是我的旧方法,它正确调用了 strengthUnit 转换器,因此为我的控制器提供了一个非空对象:
<select name="strengthUnit" path="strengthUnit.name" id="strengthUnit">
<option value="0" ${orderedMed.strengthUnit eq null ? 'selected' : ''}></option>
<c:forEach items="${strengthUnits}" var="strengthUnitSingle">
<option value="${strengthUnitSingle.id}" ${orderedMed.strengthUnit.name eq strengthUnitSingle.name ? 'selected' : ''}>${strengthUnitSingle.name}</option>
</c:forEach>
</select>
我已将这段代码更改为下面的代码,现在转换器未被调用,当它到达控制器时对象为 null :
<form:select name="strengthUnit" path="strengthUnit.id" id="strengthUnit">
<form:option value="0" label=""></form:option>
<form:options items="${strengthUnits}" itemLabel="name" itemValue="id"/>
</form:select>
更奇怪的是这个特定的实体类型附加到 2 个不同的实体并且 form:select 标签在另一个页面中工作!两个 JSP 都有此行:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
这是在配置 class 中正确注册并使用第一种方法工作的 strengthUnitConverter class' 转换方法:
@Override
public StrengthUnit convert(String id)
{
return strengthUnitService.findById(Integer.parseInt(id));
}
谢谢!
找到问题了! path 属性需要指向实体本身而不是它的 ID :
<form:select name="strengthUnit" path="strengthUnit" id="strengthUnit">
<form:option value="0" label=""></form:option>
<form:options items="${strengthUnits}" itemLabel="name" itemValue="id"/>
</form:select>
我以为它在我的其他页面上有效,但今天早上发现我错了。更正路径后,我不再获得空对象。