弹簧表格:选择“不调用转换器”上的提交



我有一个非常奇怪且相当不一致的问题,我不确定会导致它是什么。我正在从"非弹簧"选择中更改我的表格中的所有下拉列表以形式:选择,因为我发现它们更清洁,更简单。这是我的旧方法,它正确地调用了Phystemunit转换器,因此为我的控制器提供了一个非空对象:

<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个不同的实体和形式:SELECT标签在另一个页面中起作用!两个JSP都有这条线:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

这是PhorteNitConverter类'转换方法,该方法在配置类中正确注册,并使用第一个方法工作:

@Override
public StrengthUnit convert(String id) 
{
    return strengthUnitService.findById(Integer.parseInt(id));
}

谢谢!

找到了问题!路径属性需要指向实体本身,而不是其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>

我以为它在我的另一页上工作,但发现今天早上我错了。通过纠正路径,我不再获取空对象。

最新更新