Wicket如何将双输入验证添加到AjaxEditableLabel

时间:2013-04-23 10:48:13

标签: java wicket

使用ajaxEditableLabel时,我无法在wicket中为double添加输入验证。
这是我的代码:( item是listview中的listitem)

item.add(new AjaxEditableLabel("myDouble", new Model(myObject.getMyDouble())) {
                @Override
                protected void onSubmit(AjaxRequestTarget target) {
                    super.onSubmit(target);
                    myObject.setMyDouble(new Double(getEditor().getInput())); //here it fails to read the input when a use enters a wrong number
                   //Do something when it's a double
                }
            });

如何向此组件添加验证器以检查此值是否为double值?

目前我正在使用:

         Double.parseDouble(myval);

试试抓... 但是这也需要输入字符串因为和而改变。

应该有一种验票方法来验证此输入吗?

编辑**: 也许我必须将NumericTextField添加到此组件,但我不明白如何。

2 个答案:

答案 0 :(得分:1)

我通过将getInput更改为 getConvertedInput(); 解决了这个问题。 使用 getModelObject()更好,因为Type设置为Double,这样会更好。

我也将类型更改为Double。的 .setType(Double.class

item.add(new AjaxEditableLabel("myDouble", new Model(myObject.getMyDouble())) {
            @Override
            protected void onSubmit(AjaxRequestTarget target) {
                super.onSubmit(target);
                myObject.setMyDouble((Double)getEditor().getModelObject())); //changes here!!!
               //Do something when it's a double
            }
        }.setType(Double.class));

答案 1 :(得分:1)

检查一下:

爪哇:

public class MyPage extends WebPage {

    private List<Double> list = Arrays.asList(2013.0, 100.500);

    public MyPage() {

        final FeedbackPanel feedback = new FeedbackPanel("feedback");
        feedback.setOutputMarkupId(true);
        add(feedback);

        ListView<Double> items = new ListView<Double>("items", new PropertyModel(this, "list")) {
            @Override
            protected void populateItem(ListItem<Double> item) {
                item.add(new AjaxEditableLabel("item", item.getModel()) {
                    @Override
                    protected void onSubmit(AjaxRequestTarget target) {
                        System.out.println(Arrays.toString(list.toArray()));
                        target.add(feedback);
                        super.onSubmit(target);
                    }

                    @Override
                    protected void onError(AjaxRequestTarget target) {
                        target.add(feedback);
                        super.onError(target);
                    }
                }.add(new IValidator<Object>() {
                    @Override
                    public void validate(IValidatable<Object> validatable) {
                        String in = String.valueOf(validatable.getValue());
                        try {
                            Double.parseDouble(in.replace(".", ","));
                        } catch (Exception ignore) {
                            try{
                                Double.parseDouble(in.replace(",", "."));
                            }catch (Exception e){
                                ValidationError error = new ValidationError(String.format("`%s` is not a Double", in));
                                validatable.error(error);
                            }
                        }
                    }
                }));
            }
        };
        add(items);
    }
}

标记:

<div wicket:id="feedback"/>
<ul wicket:id="items">
    <li wicket:id="item"></li>
</ul>

上面的验证器仅用于演示,在实际代码中我建议创建一个单独的类(不是一个非常类)。