Калитка: Bind Model в классе - PullRequest
0 голосов
/ 13 января 2012

Как работает модель?

У меня есть класс реестра, подобный этому:

public class RegisterPanel extends Panel{

//empty user
public User user = new User();

protected ServiceClient client = ((WicketApplication) (WicketApplication.get())).getClient();

@SuppressWarnings({ "rawtypes" })
public RegisterPanel(String id) {
    super(id);
    //creates form with an empty user
    Form form = new RegisterForm("registerForm", user); 
    add(form); 
}

@SuppressWarnings({ "rawtypes" })
class RegisterForm extends Form {

    private String userId = "";
    private String email = "";
    private String password1 = "";
    private String password2 = "";

    private FormComponent formEmail;
    private FormComponent formPassword1;
    private FormComponent formPassword2;

  @SuppressWarnings("unchecked")
public RegisterForm(String id, User user) {

    super(id);
    add(new TextField("userId", new PropertyModel(this, "userId")).setRequired(true));
    formEmail = new TextField("email", new PropertyModel(this, "email")).setRequired(true);
    formPassword1 = new PasswordTextField("password1", new PropertyModel(this, "password1")).setRequired(true);
    formPassword2 = new PasswordTextField("password2", new PropertyModel(this, "password2")).setRequired(true);
    add(formEmail);
    add(formPassword1);
    add(formPassword2);
  }

  @Override
  public void onSubmit() {

      Result result = client.register(email, userId, password1);
      if(result.getStatus()) {

                      user.setEail(email);
                          user.setUserId(userId);
                          user.setPassword(password1);
                  client.postUser(user);
      }
  } 
}
 }

а как мне работать с моделями? Теперь я просто привязал PropertyModels к своим TextFields. Я думал, что смогу связать модель с моим пустым пользователем и с помощью метода submit я работаю над моделью вместо обычного пользователя. Как это работает? В чем преимущество работы на моделях?

1 Ответ

1 голос
/ 13 января 2012

Работа с моделями имеет несколько преимуществ:

public class RegisterPanel extends Panel{

protected ServiceClient client = ...

public RegisterPanel(String id) {
    super(id);
    //creates form with an empty user
    Form<Void> form = new RegisterForm<Void>("registerForm", new Model(new User())); 
    add(form); 
}

class RegisterForm extends Form<Void> {

    public RegisterForm(String id, IModel<User> user) {
        super(id);

        add(new TextField("userId", new PropertyModel(user, "userId")).setRequired(true));
        add(new TextField("email", new PropertyModel(user, "email")).setRequired(true);
        add(new PasswordTextField("password", new PropertyModel(user, "password")).setRequired(true);
        add(new PasswordTextField("password2", new Model("").setRequired(true);
}

    @Override
    public void onSubmit() {
        try {
            client.registerAndPost(email, userId, password1);
        } catch (ServiceException ex) {
            ...
        }
    }
}

Примечание:

  • RegisterForm не интересуется, откуда пользователь
  • поля формы пишут непосредственно пользователю
...