0

使用 ajaxEditableLabel 时,我无法为检票口中的双精度添加输入验证。
这是我的代码:(项目是来自列表视图的列表项)

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.parseDouble(myval);

使用 try catch... 但这也需要更改输入字符串,因为 , 和 。

应该有一个检票口方式来验证这个输入?

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

4

2 回答 2

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));
于 2013-04-23T11:57:14.090 回答
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>

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

于 2013-04-23T18:03:20.490 回答