2012-01-15 26 views
0

Ive得到下面的代碼更新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()); 
    } 
} 



    } 

當我進入一個新的名字及按我的提交按鈕,新的值停留在文本字段。對於後來的作品來說,這很好,但只是爲了理解:爲什麼他更新我的文本框,當PropertyModel仍然留給oldUser和client.getSessionUser()我仍然是老用戶。後端沒有更新。

在同一個WebPage上我得到了另一個面板,它給了我真正的用戶信息。

@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"))); 

} 

    } 

而且這個標籤變成了新的價值,但他仍然得到了oldUser通過client.getSessionUser(),因爲更新方法尚未實現。

希望有人能解釋爲什麼PropertyModels引用newUser而不是oldUser。否則爲什麼是像我建立我的PropertyModel像PropertyMode(oldUser,...

回答

3

這是模型的工作。

隨着

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

如何設置你的財產你oldUser參考「用的名字」

現在,當您提交表單,模型更新自己,使物業‘oldUser獲取與新值更新的對象用的名字’。

所有關於這裏的車型:https://cwiki.apache.org/WICKET/working-with-wicket-models.html

+0

我的愚蠢問題。謝謝你的幫助。我只是與模型一起使用getter方法。現在我認識到模型也可以使用setter方法... – user1090145 2012-01-15 15:01:17

+0

也有ReadOnlyModels :) – rotsch 2012-01-15 16:00:14

+0

什麼是ReadModel?因爲我遇到了衝突,所以在更新後端中的用戶時發生錯誤時,在前端中,它會被propertymodel更新。或者是否有任何回退方法? – user1090145 2012-01-18 10:35:24