起初我想说的是,虽然RequiredFieldValidator在.NET中使用,但是我使用这个术语来指示wicket,因为我想表示标签(color:red和text:*),它将被显示当AjaxEditableLabel的编辑器将为空时,在AjaxEditableLabel旁边。我已经设置了AjaxEditableLabel.setRequired(true)并且它正在工作,即表单不能被提交。但是我无法跟踪AjaxEditableLabel旁边的红色星标。我到目前为止所做的是:Wicket-RequiredFieldValidator for AjaxEditableLabel
private class TaskTypeSettingsForm extends Form {
private static final long serialVersionUID = 10058L;
private FeedbackMessageFilter filter;
public TaskTypeSettingsForm(String id) {
super(id);
FeedbackPanel feedback = new FeedbackPanel("feedback");
filter = new FeedbackMessageFilter();
feedback.setFilter(filter);
add(feedback);
setOutputMarkupId(true);
final TaskTypeSettingsFormModel taskTypeSettingsFormModel = new TaskTypeSettingsFormModel();
IModel model = new BoundCompoundPropertyModel(taskTypeSettingsFormModel);
setModel(model);
final WebMarkupContainer div = new WebMarkupContainer("div");
div.setOutputMarkupId(true);
final ListView listView = new ListView("listView", new PropertyModel(taskTypeSettingsFormModel, "taskTypeList")) {
@Override
protected void populateItem(ListItem item) {
final String value = (String) item.getModelObject();
final int index = item.getIndex();
final Label star = new Label("star", "*");
//this label is always displaying, I need to
//display it when the editor is blank and hide when
//it contain valid text
star.setOutputMarkupId(true);
final AjaxEditableLabel label = new AjaxEditableLabel("value", new Model(value)) {
@Override
public void onSubmit(AjaxRequestTarget target) {
super.onSubmit(target);
//here I also try to get the editor
//and add a SimpleAttributeModifier
//with a javaScript for onBlur
//event, but that script is not
//working as I am not able to
//append that script to the
//editor's existing ajax
String input = (String) getModelObject();
if (input != null) {
taskTypeSettingsFormModel.getTaskTypeList().set(index, input);
}
}
};
label.setRequired(true);
item.add(star);
label.setOutputMarkupId(true);
label.add(new SimpleAttributeModifier("style", "cursor: pointer; cursor: hand;"));
label.add(new AbstractValidator() {
@Override
protected void onValidate(IValidatable validatable) {
String value = (String) validatable.getValue();
Pattern pattern = Pattern.compile("^[a-zA-Z0-9]+$");
Matcher matcher = pattern.matcher(value);
if (!matcher.matches()) {
error(validatable);
}
}
@Override
protected String resourceKey() {
return "task_type_settings_form.error.regexFailure";
}
});
item.add(label);
item.add(removeLink("removeLink", item));
item.add(moveUpLink("up", item));
item.add(moveDownLink("down", item));
}
};
listView.setOutputMarkupId(true);
listView.setReuseItems(true);
div.add(listView);
//some code
}
@Override
protected void validate() {
filter.reset();
super.validate();
}
@Override
public void onSubmit() {
TaskTypeSettingsFormModel taskTypeSettingsFormModel = (TaskTypeSettingsFormModel) getModelObject();
for (String str : taskTypeSettingsFormModel.getTaskTypeList()) {
System.out.println(str);
}
}
}
希望我能解释一下这种情况。任何有关这方面的信息对我都很有帮助。谢谢。
仅供参考,您不需要包括“Wicket-”在你的标题;在这个网站上,标签可以达到这个目的。另外,我们通常不希望在这里使用“hello/thanks”这一行。特别是,Hellos在搜索结果中占用了预测空间。 – Pops 2011-04-06 16:10:44
@ Lord Torgamus我会记住你的建议。我在标题中包含了Wicket,因为我在我的问题中使用了术语RequiredFieldValidator,这个术语与Java而不是ASP.NET相关。 – 2011-04-06 16:28:48
我认为在每种可以想象的Web技术中都有一个RequiredFieldValidator(或类似的):-) – 2011-04-07 15:43:44