我在 Spring MVC 3.0.1 框架中将 String 转换为 Object 时遇到了一些问题。当我想使用自定义 Web 编辑器通过表单向 PostgreSQL 数据库添加一些数据(添加新产品)时,没有显示错误,表单字段被插入到数据库中,并且只为我添加的产品插入产品类别(在数据库中category_types
我插入了一些类别,它们显示在视图中)。当我在 Controller 中删除 InitBinder 方法时,出现错误,应该显示没有编辑器可以转换我想要的内容。
这是我的自定义网络编辑器的代码:
package Webeditors;
import java.beans.PropertyEditorSupport;
import Models.CategoryType;
public class CategoryTypeWebEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
CategoryType a = new CategoryType();
a.setId(Long.parseLong(text));
setValue(a);
}
@Override
public String getAsText() {
CategoryType type = (CategoryType) getValue();
return type == null ? null : Long.toString(type.getId());
}
}
我的CategoryType类是:
package Models;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="category_types")
public class CategoryType {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
long id;
String name;
public CategoryType(){}
public CategoryType(long id, String name){
this.id = id;
this.name = name;
}
...
@Override
public boolean equals(Object obj) {
if(obj instanceof CategoryType){
CategoryType a = (CategoryType)obj;
return a.getId() == id;
}
return false;
}
}
在我的 JavaBeans产品中,我声明:
@ManyToMany(fetch=FetchType.EAGER)
List<CategoryType> type;
public Product(){
type = new ArrayList<CategoryType>();
}
...
public List<CategoryType> getType() {
return type;
}
public void setType(List<CategoryType> type) {
this.type = type;
}
在我的控制器中,我有这样的东西:
@RequestMapping(method = RequestMethod.POST)
public String addProduct(Model model,
@ModelAttribute("addproduct") Product product, BindingResult result){
....
}
@ModelAttribute("categorytypes")
public List<CategoryType> loadCategoryTypes() {
List<CategoryType> types = dao.getCategory_Types();
return types;
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(CategoryType.class, new CategoryTypeWebEditor());
}
我正在这样显示它:
<form:form cssClass="form-horizontal" method="Post"
action="addproductform.html" commandName="addproduct">
<form:checkboxes items="${categorytypes}" path="type" itemValue="id" itemLabel="name" delimiter="<br>"/>
<form:errors cssStyle="margin-top: 10px; margin-left: 160px;" cssClass="alert alert-error" element="div" path="type" />
</form:form>
知道我做错了什么,它没有添加,因为我坚持使用它。谢谢