Java 反馈错误后,Wicket 1.4.9无法从modal使用AjaxRequestTarget!

Java 反馈错误后,Wicket 1.4.9无法从modal使用AjaxRequestTarget!,java,web-applications,wicket,Java,Web Applications,Wicket,当我在TextField中设置require为true并在TextField中使用null值提交时,我创建了一个简单的wicket web应用程序来使用description这个问题。我收到了一条反馈信息(听起来不错)但我的用例我想从模式窗口获取数据并发送回此表单,但它无法AjaxRequestTarget更新文本字段数据,也无法在其他文本字段上输入任何内容。我无法解决此问题。请帮助我。但当我再次运行web app并使用模式窗口时,我可以在文本字段上设置数据 这是我的示例代码 用户实体: pub

当我在TextField中设置require为true并在TextField中使用null值提交时,我创建了一个简单的wicket web应用程序来使用description这个问题。我收到了一条反馈信息(听起来不错)但我的用例我想从模式窗口获取数据并发送回此表单,但它无法AjaxRequestTarget更新文本字段数据,也无法在其他文本字段上输入任何内容。我无法解决此问题。请帮助我。但当我再次运行web app并使用模式窗口时,我可以在文本字段上设置数据

这是我的示例代码

用户实体:

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;
}
}
我的页面

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

    }

}

}试试这个。onSuccess方法,设置用户名和密码字段的模型对象

@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);
                }
我有一个类似的用例,它工作了。你似乎在努力学习英语,所以我可能不太理解你的问题

下面是我关于类似问题的代码

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);
    }
公共类ReleaseDetailPanel扩展面板{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
私人表格;
私有文本字段txtName;
私有文本区txtDescription;
私人TextField txt项目;
私人AjaxLink lnkLookupProject;
私有ModalWindow mdProjectLookup;
@注入
私家道道;
public ReleaseDetailPanel(字符串id,发布){
超级(id);
frmRelease=新表格(“frmRelease”,新型号(发布)){
/**
* 
*/
私有静态最终长serialVersionUID=8075962334880413343L;
受保护的void onSubmit(){
Release r=this.getModelObject();
dao.save(r);
};
};
txtName=newtextfield(“txtName”,newpropertyModel(release,“name”));
frmRelease.add(txtName);
txtDescription=newtextarea(“txtDescription”,newpropertyModel(release,“description”));
frmRelease.add(txtDescription);
txtProject=newtextfield(“lstProject”,newpropertyModel(release,“project”));
frmRelease.add(TXT项目);
txtProject.setEnabled(false);
setOutputMarkupId(true);
lnkLookupProject=新AjaxLink(“lnkLookupProject”){
/**
* 
*/
私有静态最终长serialVersionUID=-1014715631761886636L;
@凌驾
公共void onClick(AjaxRequestTarget目标){
mdProjectLookup.show(目标);
}
};
frmRelease.add(lnkLookupProject);
添加(frmRelease);
mdProjectLookup=新的ModalWindow(“mdProjectLookup”);
mdProjectLookup.setContent(新项目列表面板(mdProjectLookup.getContentId()){
@凌驾
公共组件getGridMenu(字符串id){
返回新标签(id);
}
@凌驾
公共组件getGridItemMenu(字符串componentId,最终项目){
返回新的LabeledAjaxFallbackLink(组件ID,“选择”){
/**
* 
*/
私有静态最终长serialVersionUID=1L;
@凌驾
公共void doClick(AjaxRequestTarget目标){
setModelObject(项目);
target.addComponent(TXT项目);
mdProjectLookup.close(目标);
}
};
}
});
添加(mdProjectLookup);
}
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);
    }