At first I want to say, although RequiredFieldValidator is used in .NET but I use this term for wicket as I want to mean a Label (color: red and text: *) which will be be di
@Tnem your solution worked perfectly. After a little tweak what I did I am showing, it might be helpful to future users:
AjaxEditableLabel taskTypeEditableLabel = new AjaxEditableLabel("taskTypeEditableLabel", new Model(value)) {
private static final long serialVersionUID = 10061L;
@Override
public void onSubmit(AjaxRequestTarget target) {
super.onSubmit(target);
String input = (String) getModelObject();
if (input != null) {
taskTypeSettingsFormModel.getTaskTypeList().set(index, input);
}
}
@Override
protected FormComponent newEditor(MarkupContainer parent, String componentId, IModel model) {
FormComponent editor = super.newEditor(parent, componentId, model);
editor.add(new AbstractBehavior() {
private static final long serialVersionUID = 10062L;
@Override
public void beforeRender(final Component component) {
super.beforeRender(component);
if (component instanceof FormComponent) {
if (!((FormComponent) component).checkRequired()) {
component.getResponse().write("*");
}
}
}
@Override
public void onComponentTag(Component component, ComponentTag tag) {
super.onComponentTag(component, tag);
if (component instanceof FormComponent) {
tag.put("style", "width: 400px");
if (!((FormComponent) component).isValid()) {
tag.put("style", "width: 400px; border: 1px solid #CC2200;");
}
}
}
});
editor.add(new AbstractValidator() {
private static final long serialVersionUID = 10063L;
@Override
protected void onValidate(IValidatable validatable) {
String value = (String) validatable.getValue();
Pattern pattern = Pattern.compile("([A-Z]+)((([\\w\\s-//]*)[\\w&&[^_]]+)?)");
Matcher matcher = pattern.matcher(value);
if (!matcher.matches()) {
error(validatable);
}
}
@Override
protected String resourceKey() {
return "task_type_settings_form.error.regexFailure";
}
});
editor.setRequired(true);
return editor;
}
@Override
protected Component newLabel(MarkupContainer parent, String componentId, IModel model) {
Component label = super.newLabel(parent, componentId, model);
label.add(new AbstractBehavior() {
private static final long serialVersionUID = 10064L;
@Override
public void onComponentTag(Component component, ComponentTag tag) {
super.onComponentTag(component, tag);
if (component instanceof Component) {
tag.put("style", "cursor: pointer; cursor: hand;");
}
}
});
return label;
}
};
taskTypeEditableLabel.setOutputMarkupId(true);