Wicket DropDownChoice 필드 대신 개체를 데이터베이스에 저장합니다.
-
12-12-2019 - |
문제
내 코드에서 DropDownChoice를 구현하는 데 문제가 있습니다.ProductCategory 유형의 객체 목록을 표시하고 싶습니다.이것은 모두 훌륭하고 괜찮을지 만 양식을 저장하려고하면 전체 ProductCategory 객체가 저장된 객체의 필드만이 아닌 전체 ProductCategory 객체가 저장됩니다.
여기에 내 코드가 어떻게 생겼는지 :
IModel categories = new LoadableDetachableModel() {
public List<ProductCategory> load() {
List<ProductCategory> l = categoryService.findAllProducts();
return l;
}
};
IChoiceRenderer renderer = new IChoiceRenderer() {
public Object getDisplayValue(Object obj) {
ProductCategory category = (ProductCategory) obj;
return category.getName();
}
public String getIdValue(Object obj, int index) {
ProductCategory category = (ProductCategory) obj;
return category.getName();
}
};
DropDownChoice<ProductCategory> listCategories = new DropDownChoice<ProductCategory>(
"productCategory",
categories,
renderer
);
add(listCategories);
.
생성 된 HTML은 다음과 같이 보입니다.
<select wicket:id="productCategory" name="productCategory">
<option selected="selected" value="">Vælg en</option>
<option value="test1">test1</option>
<option value="test2">test2</option>
</select>
.
"ProductCategory"필드는 "제품"유형의 객체에 있으며 문자열 유형입니다.
내가 묘사하려고 시도했다.ProductCategory.getName ()을 제품의 "ProductCategory"필드에 저장하고 전체 ProductCategory 객체가 아닙니다. 즉, "test1"을 product.productCategory에 저장하지만 대신 com.test.webapp.domain.ProductCategory@1. 를 저장합니다.
누구든지 이것이 어떻게 완료되었는지 알려주십시오.
도움이 많이 많이 감사합니다.
해결책
문제는 DDC의 모델 객체가 ProductCategory 유형입니다.저장할 때 이는 형식 뒤의 모델 객체에 정의 된 문자열 유형으로 캐스팅됩니다.
코드가 선택한 목록에있는 문자열 만 변경합니다.
public List<String> load() {
List<String> pcChoices = new ArrayList<String>();
for(ProductCategory pc : categoryService.findAllProducts()) {
pcChoices.add(pc.getName());
}
return pcChoices;
}
.
선택한 렌더러를 제거 할 수도 있습니다.
제휴하지 않습니다 StackOverflow