Java 在Wicket文本字段中添加侦听器
我试图制造一个无线电场,比如(是的,不是,未知)。对于“是”,我有一个文本字段。我希望,如果在文本字段中键入任何内容,将在radiobutton上选择“是”。 我试过了,但有个例外:Java 在Wicket文本字段中添加侦听器,java,wicket,textfield,wicketstuff,Java,Wicket,Textfield,Wicketstuff,我试图制造一个无线电场,比如(是的,不是,未知)。对于“是”,我有一个文本字段。我希望,如果在文本字段中键入任何内容,将在radiobutton上选择“是”。 我试过了,但有个例外: size = new NumberField<Double>("size", fieldLabel("size"), HasUnits.MICROMETER); size.add(new AjaxFormComponentUpdatingBehavior("onchange") { priv
size = new NumberField<Double>("size", fieldLabel("size"), HasUnits.MICROMETER);
size.add(new AjaxFormComponentUpdatingBehavior("onchange") {
private static final long serialVersionUID =
2462233190993745889L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
downSet.setDefaultModelObject("yes");
}
});
add(size);
size.setOutputMarkupId(true);
和我的NumberField
课程:
public class NumberField<T extends Number & Comparable<T>> extends SampleField implements HasUnits {
private static final long serialVersionUID = 4885709350741384398L;
private NumberInput<T> numberInput;
private String unit;
public NumberField(String id, IModel<String> fieldLabel, IModel<T> model) {
super(id, fieldLabel, model);
}
public NumberField(String id, IModel<String> fieldLabel) {
super(id, fieldLabel);
}
public NumberField(String id, IModel<String> fieldLabel, String unit) {
super(id, fieldLabel);
this.unit = unit;
}
@SuppressWarnings("unchecked")
public void onInitialize() {
super.onInitialize();
Form<T> f = new Form<>("form");
this.numberInput = new NumberInput<T>("value",
(IModel<T>) getDefaultModel());
this.numberInput.setUnit(unit);
f.add(numberInput);
add(f);
}
}
public abstract class SampleField extends Panel {
private static final long serialVersionUID = 1L;
public SampleField(String id, IModel<String> fieldLabel) {
super(id);
addFieldName(fieldLabel);
}
public SampleField(String id, IModel<String> fieldLabel, IModel<?> model) {
super(id, new CompoundPropertyModel<>(model));
addFieldName(fieldLabel);
}
private final void addFieldName(IModel<String> fieldLabel) {
add(new Label("fieldname", fieldLabel));
}
}
有人知道我如何解决这个问题吗 如果您想要一个可以使用AjaxFormComponentUpdateingBehavior的自定义表单组件,那么应该从FormComponent扩展SampleField。但我不确定您是否真的需要自定义表单组件,而不仅仅是文本字段(“大小”)。尝试在数字字段上使用AjaxEventBehavior(“更改”)。对于更严重的问题,您必须将行为添加到包装好的numberInput。您使用的NumberField类是什么?显然,它不是一个标准的Wicket(表单)组件,一个名为NumberTextField。很抱歉,忘了发布它。它扩展了我们也看不到的
SampleField
。那是从哪里来的?有什么不明白的?错误清楚地告诉您只能使用FormComponent,并且您的NumberField不是FormComponent的子类。谢谢!这是最好/最简单的解决方案!
public abstract class SampleField extends Panel {
private static final long serialVersionUID = 1L;
public SampleField(String id, IModel<String> fieldLabel) {
super(id);
addFieldName(fieldLabel);
}
public SampleField(String id, IModel<String> fieldLabel, IModel<?> model) {
super(id, new CompoundPropertyModel<>(model));
addFieldName(fieldLabel);
}
private final void addFieldName(IModel<String> fieldLabel) {
add(new Label("fieldname", fieldLabel));
}
}