2012-01-15 11 views
0

アイブ氏はUser.classを更新するコードを以下ました:ウィケット:PropertyModel更新

@SuppressWarnings("serial") 
public class UpdateProfilePanel extends Panel{ 

protected ServiceClientTemp client = ((WicketApplication) (WicketApplication.get())).getClient(); 
protected User oldUser; 
protected User newUser; 

public UpdateProfilePanel(String id) { 
    super(id); 
    Form updateProfileForm = new UpdateProfileForm("updateProfileForm"); 
    add(updateProfileForm); 
} 


class UpdateProfileForm extends Form { 

    private FormComponent formForename; 
    private FormComponent formSurname; 
    private FormComponent formEmail; 

    public UpdateProfileForm(String id) { 
     super(id); 
     oldUser = client.getSessionUser(); 
     formForename = new TextField("forename1", new PropertyModel(oldUser, "forename")); 
     formSurname = new TextField("surname1", new PropertyModel(oldUser, "surname")); 
     formEmail = new TextField("email1", new PropertyModel(oldUser, "email")); 
     add(formForename); 
     add(formSurname); 
     add(formEmail); 
    } 

    public void onSubmit() { 
     newUser = new User(); 
     newUser.setForename(formForename.getInput()); 
     newUser.setSurname(formSurname.getInput()); 
     newUser.setEmail(formEmail.getInput()); 
    } 
} 



    } 

私は新しいforenameを入力して、私は送信ボタンを押すと、新しい値がテキストフィールドに残ります。後で、これほどうまくいくが、理解のためだけに:なぜ彼は私のTextfieldを更新するのですか?PropertyModelがoldUserとclient.getSessionUser()に変わったときに私はまだoldUserを取得します。バックエンドには更新がありませんでした。

同じWebページ上で、Iveには別のPanelがあります。このパネルは私にユーザーの情報を与えてくれます。更新方法はまだ実装されていないため、彼は、まだ取得client.getSessionUser()によってoldUserが

@SuppressWarnings("serial") 
public class UserInfoPanel extends Panel { 

protected ServiceClientTemp client = ((WicketApplication) (WicketApplication.get())).getClient(); 
protected User infoUser; 


@SuppressWarnings("rawtypes") 
UserInfoPanel(String id) { 
    super(id); 


    infoUser = client.getSessionUser(); 
    add(new Label("username", new PropertyModel(infoUser, "username"))); 
    add(new Label("surname", new PropertyModel(infoUser, "surname"))); 
    add(new Label("forename", new PropertyModel(infoUser, "forename"))); 
    add(new Label("email", new PropertyModel(infoUser, "email"))); 
    add(new Label("state", new PropertyModel(infoUser, "state"))); 

} 

    } 

はまた、このラベルは、新しい値に変わります。

誰かが、なぜ、PropertyModelsがoldUserの代わりにnewUserを参照しているのか、私が説明できることを願ってください。なぜ他、私はどのようなモデルが仕事だPropertyMode(oldUser、...

答えて

3

のように私のPropertyModelを構築するようにそれはある。

formForename = new TextField("forename1", new PropertyModel(oldUser, "forename")); 

を使用すると、プロパティ「forenameのためにあなたのoldUserへの参照を設定します」今

フォーム、モデルの更新自体を提出し、プロパティように 『oldUserが新しい値で更新されるオブジェクトのforename』。

ここにすべてのモデルについて:https://cwiki.apache.org/WICKET/working-with-wicket-models.html

+0

私の愚かな質問。ご協力いただきありがとうございます。私はちょうどゲッターメソッドと関連してモデルを使って作業しました。今私はモデルがセッターメソッドでも動作することを認識しました... – user1090145

+0

ReadOnlyModelsもあります:) – rotsch

+0

ReadModelとは何ですか?私は競合を起こすので、バックエンドで自分のユーザーを更新する際にエラーが発生するが、フロントエンドでは、プロパティーモデルによって更新されます。または、フォールバック方式がありますか? – user1090145