views:

149

answers:

1

I create a simple wicket web app for using description this problem when i set require is true at TextField and submit with null value in Textfield. i have got a feedback panel message (This sound good) but my use case i want to get my data from modal windows and send back to this form but it can not AjaxRequestTarget update TextField data and cannot input anything on other textfield.i cannot solve with this problem.please help me.but when i run web app again and used modal windows i can setting my data on text field.

This is my sample Code

User Entity :

public class User implements Serializable {

private String username;
private String password;

public User(String username, String password){
    this.username = username;
    this.password = password;
}

public User() {
    // TODO Auto-generated constructor stub
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}
}

My Page

public class FormPage extends WebPage{

private User user;
private ModalWindow modal;
private TestForm form;

public FormPage() {
    user = new User();

    modal = new ModalWindow("modal");
    modal.setOutputMarkupId(true);
    modal.setInitialHeight(300);
    modal.setInitialWidth(300);
    add(modal);

    form = new TestForm("form");
    add(form);
}

private class TestForm extends Form {

    private FeedbackPanel feedback;
    private TextField<String> username;
    private AjaxLink popupButton;
    private AjaxButton submitButton;
    private TextField<String> password;

    public TestForm(String id) {
        super(id);

        feedback = new FeedbackPanel("feedback");
        feedback.setOutputMarkupId(true);
        add(feedback);

        username = new TextField<String>("username", new PropertyModel<String>(FormPage.this, "user.username"));
        username.setOutputMarkupId(true);
        username.setRequired(true);
        add(username);

        password = new TextField<String>("password", new PropertyModel<String>(FormPage.this, "user.password"));
        password.setOutputMarkupId(true);
        password.setRequired(true);
        add(password);

        popupButton = new AjaxLink("popupButton") {

            @Override
            public void onClick(AjaxRequestTarget target) {
                UserPopup popup = new UserPopup(modal.getContentId()) {

                    @Override
                    public void onSuccess(AjaxRequestTarget target, User user) {
                        FormPage.this.user = user;
                        target.addComponent(username);
                        target.addComponent(password);
                        modal.close(target);
                    }
                };
                modal.setContent(popup);
                modal.show(target);
            }
        };
        add(popupButton);

        submitButton = new AjaxButton("submitButton", this) {

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                // TODO Auto-generated method stub

            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                target.addComponent(feedback);
            }
        };
        add(submitButton);

    }

}

}

my popup :

public abstract class UserPopup extends Panel{

private User user;

public UserPopup(String id) {
    super(id);

    user = new User("name","pass");

    add(new AjaxLink("userLink"){

        @Override
        public void onClick(AjaxRequestTarget target) {
            onSuccess(target, user);
        }


    });
}

public abstract void onSuccess(AjaxRequestTarget target,User user);

}

A: 

Hi,

try this. onSuccess method, set the model object of your username and password fields.

@Override
                public void onSuccess(AjaxRequestTarget target, User user) {
                    FormPage.this.user = user;
                    username.setModelObject(user.getUsername());
                    password.setModelObject(user.getPassword());
                    target.addComponent(username);
                    target.addComponent(password);
                    modal.close(target);
                }

I had a similar usecase and it worked. You seem to be struggling with your english and so i may not have understood your question well.

Below is my code on similar problem.

public class ReleaseDetailPanel extends Panel {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Form<Release> frmRelease ;

    private TextField<String> txtName ;

    private TextArea<String> txtDescription;

    private TextField<Project> txtProject;

    private AjaxLink<String> lnkLookupProject ;

    private ModalWindow mdProjectLookup ;

    @Inject
    private Dao dao ;


    public ReleaseDetailPanel(String id, Release release) {
        super(id);

        frmRelease = new Form<Release>("frmRelease", new Model<Release>(release)){
            /**
             * 
             */
            private static final long serialVersionUID = 8075962334880413343L;

            protected void onSubmit() {
                Release r = this.getModelObject();
                dao.save(r);
            };
        };

        txtName = new TextField<String>("txtName", new PropertyModel<String>(release, "name"));
        frmRelease.add(txtName);

        txtDescription = new TextArea<String>("txtDescription", new PropertyModel<String>(release, "description"));
        frmRelease.add(txtDescription);

        txtProject = new TextField<Project>("lstProject", new PropertyModel<Project>(release, "project") );
        frmRelease.add(txtProject);
        txtProject.setEnabled(false); 
        txtProject.setOutputMarkupId(true);

        lnkLookupProject = new AjaxLink<String>("lnkLookupProject"){
            /**
             * 
             */
            private static final long serialVersionUID = -1014715631761886636L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                mdProjectLookup.show(target);
            }


        };
        frmRelease.add(lnkLookupProject);
        add(frmRelease);

        mdProjectLookup = new ModalWindow("mdProjectLookup");
        mdProjectLookup.setContent(new ProjectListPanel(mdProjectLookup.getContentId()){

            @Override
            public Component getGridMenu(String id) {

                return new Label(id);
            }

            @Override
            public Component getGridItemMenu(String componentId, final Project project) {
                return new LabeledAjaxFallbackLink(componentId, "Select"){

                    /**
                     * 
                     */
                    private static final long serialVersionUID = 1L;

                    @Override
                    public void doClick(AjaxRequestTarget target) {
                        txtProject.setModelObject(project);
                        target.addComponent(txtProject);
                        mdProjectLookup.close(target);
                    }


                };

            }

        });

        add(mdProjectLookup);
    }
joshua