我有一个非常奇怪且相当不一致的问题,我不确定会导致它是什么。我正在从"非弹簧"选择中更改我的表格中的所有下拉列表以形式:选择,因为我发现它们更清洁,更简单。这是我的旧方法,它正确地调用了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>
我以为它在我的另一页上工作,但发现今天早上我错了。通过纠正路径,我不再获取空对象。