【发布时间】:2017-11-26 20:42:22
【问题描述】:
我有一个非常奇怪且相当不一致的问题,我不确定是什么原因造成的。我正在将表单中的所有下拉列表从非 Spring 选择更改为 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>
我已将此代码更改为下面的代码,现在转换器没有被调用,并且当它碰到控制器时对象为空:
<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"%>
这是在配置类中正确注册并使用第一种方法工作的strengthUnitConverter类的转换方法:
@Override
public StrengthUnit convert(String id)
{
return strengthUnitService.findById(Integer.parseInt(id));
}
谢谢!
【问题讨论】:
标签: java spring forms select converter