2017-11-14 1 views
0

CompoundPropertyModel의 데이터로 양식을 채 웁니다. 내 TextAreaDateTextField은 Model 필드를 Id로 사용하여 값을 얻으므로 https://ci.apache.org/projects/wicket/guide/6.x/guide/modelsforms.html에서 설명한대로 모델을 부모에서 찾고 반사를 통해 값을 찾습니다. 하지만 내 DropDownChoice에서이 작업을 수행하지 못했습니다. 값은 null의 그대로입니다.Wicket : CompoundPropertyModel을 사용한 DropDownChoice의 설정 값

누군가 내가 잘못하고있는 것을 알고 있다면 듣고 싶습니다. 현재 FotoGroepPropertyModel을 내 DropDownChoice 생성자에주는 작업장이 있습니다.

등급 :

public class ImageControlForm<T extends Foto> extends StatelessForm<Foto> { 

    private TextArea<String> beschrijving; 
    private DateTextField datum; 
    private DropDownChoice<FotoGroep> groep; 

    public ImageControlForm(String id, CompoundPropertyModel<Foto> fotoModel) { 
     super(id, fotoModel); 

     setMultiPart(true); 
     setDefaultModel(fotoModel); 

     add(maakBeschrijvingField()); 
     add(maakDatumField()); 
     add(maakGroepField()); 
    } 

    private TextArea<?> maakBeschrijvingField() { 
     beschrijving = new TextArea<>("beschrijving"); 
     return beschrijving; 
    } 

    private DateTextField maakDatumField() { 
     datum = new DateTextField("datum", "d/M/yy"); 
     datum.add(new DatumPicker()); 
     return datum; 
    } 

    private DropDownChoice<FotoGroep> maakGroepField() { 
     Order sortOrder = Helper.createOrder("naam", SortOrder.ASC); 
     List<FotoGroep> fotoGroepen = databaseService.getPictureGroups(sortOrder); 
     groep = new DropDownChoice<>("fotoGroep", fotoGroepen, new ChoiceRenderer<FotoGroep>("naam", "fotoGroepId")); 
     groep.isRequired(); 
     return groep; 
    } 

사진 :

@Entity 
@Table(name = "XS_FOTO") 
public class Foto extends BasisModel implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "FOTO_ID") 
    private Long fotoId; 

    @Column(name = "BESCHRIJVING", nullable = true) 
    private String beschrijving; 

    @Column(name = "DATUM", nullable = true) 
    @Temporal(TemporalType.DATE) 
    private Date datum; 

    @ManyToOne 
    @JoinColumn(name = "FOTO_GROEP_ID", nullable = false) 
    private FotoGroep fotoGroep = new FotoGroep(Long.valueOf(12)); 

    (getters and setters) 

FotoGroep : 요청으로, 나는 equalshashCode하지만 succes에없이 재정의하려고

@Entity 
@Table(name = "XS_FOTO_GROEP") 
public class FotoGroep extends BasisModel implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "FOTO_GROEP_ID") 
    private Long fotoGroepId; 

    @Column(name = "NAAM", nullable = false) 
    private String naam; 

    @Override 
    public boolean equals(Object object) { 
     return (this.getFotoGroepId().equals(((FotoGroep)object).getFotoGroepId())); 
    } 

    @Override 
    public int hashCode() { 
     return Objects.hash(fotoGroepId, naam, beschrijving, datum); 
    } 

    (getters and setters) 

. 디버그 한 결과 foto.fotoGroep.fotoGroepIdList<FotoGroepen>fotoGroep.fotoGroepId과 동일합니다. FotoGroep도 런타임시 동일한 bean입니다. 내 단위 테스트는 모델에서와 같이 목록에 동일한 FotoGroep을 넣습니다.

편집이 가능 나쁜 단위 테스트 (?) : 나는 내 DropDownChoice의 값을 테스트 하였다 :

assertEquals("456", formTester.getTextComponentValue("fotoGroep")); 

이 값은 널 반환 유지. 나는 HTML을 확인할 때 하지만, 내가 올바른 옵션이 선택되어 있는지 볼 수 있습니다

<select wicket:id="fotoGroep" name="fotoGroep" disabled="disabled"> 
    <option value="123">naam</option> 
    <option value="123">naam</option> 
    <option value="123">naam</option> 
    <option value="123">naam</option> 
    <option value="123">naam</option> 
    <option value="123">naam</option> 
    <option selected="selected" value="456">naam</option> 
</select> 

사람이 동작을 설명 할 수 있을까요? 내 DropDownChoice 안에 PropertyModel을 사용할 때 값을 설정하지만 모델 상속을 사용할 때는 설정하지 않습니다.

+0

드롭 다운에서 설정되지 않은 값이 equals 및 hashcode 메소드에 문제가있는 것 같습니다. compoundProperty 모델을 지정했기 때문에 코드에서 여전히 속성 모델을 사용하지 않는 것이 좋습니다. – soorapadman

+0

@soorapadman equals 및 hashCode 재정의를 추가했지만 문제가 계속 발생합니다. 나는 그들을 내 게시물에 추가했습니다. 확인할 수 있습니까? –

+0

@WesleyDeKeirsmaeker는'Long'과'=='를 비교하는 것은 내부적으로 캐시 된 특정 범위에서만 작동합니다. 예를 들어'Long.valueOf (9999) == Long.valueOf (9999)'는 false를 반환합니다.'==' –

답변

3

나는 DropDownChoice을 잘못 테스트하고있었습니다.

은 내가 DropDownChoice의 값을 테스트 하였다

assertEquals("456", formTester.getTextComponentValue("fotoGroep")); 

하지만 내 경우에는

는,이 값이 설정되지 않았다 하지만 올바른 옵션이 선택했다! 의 DropDownChoice를 취할 것

DropDownChoice<FotoGroep> dropDownChoice = (DropDownChoice)tester.getComponentFromLastRenderedPage("imageControlPanel:imageControlForm:fotoGroep"); 
dropDownChoice.setModelObject(createFotoGroep); 
tester.assertModelValue("imageControlPanel:imageControlForm:fotoGroep", dropDownChoice.getModelObject()); 

테스트 당신은 모두의 모델을 비교 한 후 기대되고 값을 설정 : 나는 내 테스트를 변경했습니다.