2015-01-29 3 views
2

특정 속성에 다른 유형이있는 모델에 CompoundPropertyModel이 첨부 된 경우 Wicket 방식으로 선택한 DropDownChoices 값을 변환 할 수 있습니까? 내가 추측하기 때문에선택한 DropDownChoice를 CompoundPropertyModel의 모델로 변환

간단한 예를 들어, 내 설명이 매우 정확하지 않습니다 :

public enum MyChoices { 
    ONE(1),TWO(2),THREE(3); 
    // ... etc 
} 

public class MyEntityModel { 
    private int number; 
    private String text; 
} 

// the WebPages constructor: 
public ChoicePage() { 
    IModel<MyEntityModel> model = new CompoundPropertyModel<>(new EntityModel()); 
    Form<MyEntityModel> form = new Form<MyEntityModel>("form", model); 
    add(form); 

    form.add(new TextField<String>("text")); 
    form.add(new DropDownChoice<>("choices", Model.of(MyChoices.ONE), 
      Arrays.asList(MyChoices.values())) 

} 

선택 ONE과 양식을 제출, 내가 모델 객체가 값 1을 갖고 싶어.

MyEntityModel 필드가 아닌 DropDownChoice 구성 요소의 이름을 지정하고 제출 한 후에 해당 값을 모델에 복사 할 수 있다는 것을 알고 있습니다. 그러나 그것은 Wickets 모델 접근법이 아닙니다.

P.s : 내가

답변

1

개찰구 6.17.0을 사용하고 당신은 약간의 변환을 수행해야합니다.

선택 목록 변환 다음 중 하나를

form.add(new DropDownChoice<Integer>("number", 
    new AbstractReadOnlyModel<List<Integer>>() { 
    public List<Integer> getObject() { 
     return MyChoices.getAllAsInts(); 
    } 
    } 
); 

또는 선택한 선택 :

form.add(new DropDownChoice<MyChoices>("number", Arrays.asList(MyChoices.values()) { 
    public IModel<?> initModel() { 
    final IModel<Integer> model = (IModel<Integer>)super.initModel(); 

    return new IModel<MyChoice>() { 
     public MyChoice getObject() { 
     return MyChoice.fromInt(model.getObject()); 
     } 

     public void setObject(MyChoice myChoice) { 
     model.setObject(myChoice.toInt()); 
     } 
    }; 
    } 
); 
+0

두 번째 솔루션은 내가 찾던 정확히 무엇을. 일반적으로 피해야하는 체크되지 않은 캐스트입니다. – Imperative

관련 문제