Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Wicket文本字段中添加侦听器_Java_Wicket_Textfield_Wicketstuff - Fatal编程技术网

Java 在Wicket文本字段中添加侦听器

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

我试图制造一个无线电场,比如(是的,不是,未知)。对于“是”,我有一个文本字段。我希望,如果在文本字段中键入任何内容,将在radiobutton上选择“是”。 我试过了,但有个例外:

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));
    }

}