我有一个名为Project的类,它有一个属性类别。 Project和Category类有一对多的关系。
public class Project {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="category_id")
private Category category;
public class Category {
@OneToMany(fetch=FetchType.LAZY, mappedBy="category")
private Set<Project> project = new HashSet<Project>(0);
在我的JSP中,我有一个下拉列表,我在其中选择特定项目的类别
<select class="form-control" name="category" >
<c:forEach items="${categoriesList}" var="category">
<option value="${category.id}"><c:out value="${category.category_name}" /></option>
</c:forEach>
</select>
我的控制器看起来像是
@RequestMapping(value = "/client/post_project", method = RequestMethod.POST)
public String postProject(@ModelAttribute("project") Project p){
projectService.addProject(p);
return "/client/project";
}
我试图添加一个项目,但我一直有这个错误。谁能告诉我我做错了什么?
Field error in object 'project' on field 'category': rejected value [3];
codes [typeMismatch.project.category,typeMismatch.category,typeMismatch.model.Category,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [project.category,category]; arguments []; default message [category]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'model.Category' for property 'category'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [model.Category] for property 'category': no matching editors or conversion strategy found]
答案 0 :(得分:0)
这个想法很简单。您将必须做两件事。
org.springframework.core.convert.converter.Converter<S, T>
的类,其中S(源)是您在表单中提到的java.lang.String
。
<option value="${category.id}">
,T(目标)为Category
。转换器接口具有一种必须实现的抽象方法。
T convert(S source);
在实现中,您必须提供将源对象转换为Category
的逻辑。可能是您的@Repository
类需要一点帮助。
extends WebMvcConfigurationSupport
。您将必须@Override
个addFormatters
方法并在那里注册您的转换器。 所以会像
转换器类的实现
@Component
public Class StringToCategoryConverter implements Converter<String, Category> {
@AutoWired
private CategoryRepository repository;
@Override
public Category convert(final String source) {
return repository.getCategoryById(source);
}
}
注册也是必需的,您需要在通常扩展WebMvcConfigurationSupport
的类中进行注册。她的父亲。
@Component
@EnableSpringDataWebSupport
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(stringToCategoryConverter());
super.addFormatters(registry);
}
@Bean
public StringToCategoryConverter stringToCategoryConverter(){
return new StringToCategoryConverter();
}
}
希望它能对您有所帮助。