とDropDownChoiceの設定値は、私はCompoundPropertyModel
からのデータをフォームに記入しています。マイTextArea
とDateTextField
、それはそれの両親にモデルを探し、https://ci.apache.org/projects/wicket/guide/6.x/guide/modelsforms.htmlで説明したように、反射によって価値がありますので、IDとしてモデルのフィールドの名前を使用して、値を取得します。 しかし私はこれを私のDropDownChoice
のために働かせません。値はnullのままです。ウィケット:CompoundPropertyModel
は、誰かが私が間違ってやっていることを知っているならば聞くのが大好きです。現在、私は私のDropDownChoice
コンストラクタにFotoGroep
のPropertyModel
を与える代わりにworkarroundを持っています。
クラス:
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;
}
FOTO:
@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
を上書きしようとしたが、大成功なし。私はデバッグし、foto.fotoGroep.fotoGroepId
はList<FotoGroepen>
の中の唯一のfotoGroep.fotoGroepId
と同じです。 FotoGroep
は実行時に同じBeanですらあります。私の単体テストは、Modelと同じリストに同じFotoGroep
を置いています。
編集、可能性の悪いユニットテスト(?):値がNullを返すまま
assertEquals("456", formTester.getTextComponentValue("fotoGroep"));
: 私は私のDropDownChoice
の値をテストしていました。 しかし私は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
を使用している場合は、値を設定しますが、モデルの継承を使用しない場合は値を設定します。
値が等しいとhashCodeメソッドと、おそらく問題がドロップダウンに設定されていない場合。あなたがまだcompoundpropertyモデルを割り当てているので、あなたのコードはまだプロパティモデルを使用することをお勧めしません。 – soorapadman
@soorapadman私はequalsとhashCodeのオーバーライドを追加しましたが、問題はそのまま残ります。私はそれらを私のポストに加えました。確認できますか? –
@WesleyDeKeirsmaekerは 'Long'と' == 'を比較すると、内部的にキャッシュされた特定の範囲に対してのみ動作します。たとえば、 'Long.valueOf(9999)== Long.valueOf(9999)'はfalseを返します。'==' –