使用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添加到此组件,但我不明白如何。
答案 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>
上面的验证器仅用于演示,在实际代码中我建议创建一个单独的类(不是一个非常类)。