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>

我以为它在我的其他页面上有效,但今天早上发现我错了。更正路径后,我不再获得空对象。