0

オブジェクトにマップする CompoundPropertyModel があります。

例えば

final TextField<String> adresseName = new TextField<String>("Adresse");

にマップします

public class Invoice implements Serializable{

   private String adresse;

   public String getAdresse() {
       return adresse;
   }
   public void setAdresse(String adresse) {
       this.adresse = adresse;
   }
}

しかし、オブジェクトのアドレスが null であるか設定されていない場合は、テキスト フィールドに "" などのデフォルト値を設定する必要があります。

どうすればそれができますか?

よろしく、デイブ

4

2 に答える 2

3

setConvertEmptyInputStringToNull(false)がそれを行う必要があります。

于 2012-11-22T06:01:03.297 に答える
2

最も簡単なことは、Invoice.getAdresse()の代わりに空の文字列を返すようにすることですnull

public String getAdresse() {
   return addresse != null ? adresse : "";
}

結局のところ、nullが有効な値でない場合、そのルールを強制するのは UI レイヤーの仕事ではありません。

更新:これに Wicket を使用する必要がある場合、他のオプションはモデル チェーンを利用することです。最初に、クエリのデフォルト値を設定するモデルを作成する必要があります。

class HackyModel extends Model {

    public Object getObject() {
        Invoice ret = (Invoice)super.getObject();
        if( ret != null && ret.getAddresse() == null ) {
           ret.setAddresse( "" );
        }
        return ret;
    }
 }

次に、このモデルを のコンストラクターに渡しCompoundPropertyModelます。Wicket が を介して任意のフィールドを設定/取得しようとすると、モデルが最初に呼び出され、一種のフィルターとして機能するCompoundPropertyModelバッキング オブジェクトが取得されます。Invoice

バッキングオブジェクトを変更すべきではないため、これは良い解決策ではありModel.getObject()ませんが、考え抜かれたPOJOを回避するために採用しなければならない最もクリーンなハックです。

于 2012-11-21T22:44:40.177 に答える