我创建了一个简单的wicket web应用程序,当我在TextField中设置require为true并在Textfield中提交null值时,使用描述此问题。我有一个反馈面板消息(这听起来不错),但我的用例我想从模态窗口获取我的数据并发送回此表单,但它不能AjaxRequestTarget更新TextField数据,不能输入任何其他textfield.i无法解决有这个问题。请帮助我。但是当我再次运行web应用程序并使用模态窗口时,我可以在文本字段上设置我的数据。
这是我的示例代码
用户实体:
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);
}
}
}
我的弹出窗口:
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);
}
答案 0 :(得分:0)
试试这个。 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);
}