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