CompoundPropertyModel
의 데이터로 양식을 채 웁니다. 내 TextArea
및 DateTextField
은 Model 필드를 Id로 사용하여 값을 얻으므로 https://ci.apache.org/projects/wicket/guide/6.x/guide/modelsforms.html에서 설명한대로 모델을 부모에서 찾고 반사를 통해 값을 찾습니다. 하지만 내 DropDownChoice
에서이 작업을 수행하지 못했습니다. 값은 null의 그대로입니다.Wicket : CompoundPropertyModel을 사용한 DropDownChoice의 설정 값
누군가 내가 잘못하고있는 것을 알고 있다면 듣고 싶습니다. 현재 FotoGroep
의 PropertyModel
을 내 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 : 요청으로, 나는 equals
및 hashCode
하지만 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.fotoGroepId
은 List<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
을 사용할 때 값을 설정하지만 모델 상속을 사용할 때는 설정하지 않습니다.
드롭 다운에서 설정되지 않은 값이 equals 및 hashcode 메소드에 문제가있는 것 같습니다. compoundProperty 모델을 지정했기 때문에 코드에서 여전히 속성 모델을 사용하지 않는 것이 좋습니다. – soorapadman
@soorapadman equals 및 hashCode 재정의를 추가했지만 문제가 계속 발생합니다. 나는 그들을 내 게시물에 추가했습니다. 확인할 수 있습니까? –
@WesleyDeKeirsmaeker는'Long'과'=='를 비교하는 것은 내부적으로 캐시 된 특정 범위에서만 작동합니다. 예를 들어'Long.valueOf (9999) == Long.valueOf (9999)'는 false를 반환합니다.'==' –