2015-12-20 1 views
0

У меня есть сценарий followinf:Как показать сообщения об ошибках валидатора пользователю при ошибке проверки?

  1. У меня есть поле с DoubleRangeValidator с указанным сообщением об ошибке field.addValidator (новый DoubleRangeValidator ("Зарплата должна быть числовое значение", 0дн, 1000000d));

  2. Под кнопкой SAVE я называю BeanFieldGroup.commit(), который поднимает исключение о неприменении числового значения в таком поле

  3. Чтобы показать ошибки я использую ErrorUtils класс упоминается здесь Display error messages directly in Vaadin 7

.. который просто вызывает component.getErrorMessage() для всех полей/компонентов и собирает все сообщения об ошибках. Но поле с валидатором DoubleRange возвращает null для getErrorMessage(), поэтому здесь нет сообщения об ошибке. То же самое относится к другим валидаторам. Итак, мой вопрос в том, как я могу показать сообщения об ошибках валидатора, когда ошибка проверки возникает во время commit()?

ответ

0

Я попытался воспроизвести вашу ошибку с классом ErrorUtils, который вы упомянули, но метод getErrorMessage не был возвращен null. Возможно, что-то не так с тем, как вы создаете свои BeanFieldGroup и/или Field. Вот мой код:

@Override 
protected void init(VaadinRequest request) { 

    BeanFieldGroup<MyBean> bfg = new BeanFieldGroup<>(MyBean.class); 
    bfg.setItemDataSource(new MyBean()); 

    Field<?> salaryField = bfg.buildAndBind("salary"); 
    salaryField.addValidator(new DoubleRangeValidator("Salary must be a numeric value.", 0d, 1000000d)); 

    Button commit = new Button("Save", e -> { 
     try { 
      bfg.commit(); 
     } 
     catch (CommitException ce) { 
      ErrorUtils.showComponentErrors(bfg.getFields()); 
     } 
    }); 

    VerticalLayout hLayout = new VerticalLayout(salaryField, commit); 
    setContent(hLayout); 
} 
public class MyBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private double salary; 

    public MyBean() {} 

    public double getSalary() { 
     return salary; 
    } 

    public void setSalary(double salary) { 
     this.salary = salary; 
    } 
} 
+0

Спасибо, я узнал, что у меня была field.setValidationVisible (ложь); ... и это привело к тому, что сообщение проверки не было недоступно. Устанавливает значение true для сообщения об ошибке. Но теперь он показывает сообщение по умолчанию «Не удалось преобразовать значение в Double» вместо моего пользовательского текста. –

+0

Да, прежде чем проверять (то есть через «DoubleRangeValidator») значение зарплаты, Vaadin должен сначала преобразовать его в тип свойства (т. Е. «Double»), и именно здесь возникает новая ошибка. Если вы хотите переопределить это, используйте 'field.setConverter()'. Вот пример: https://vaadin.com/forum#!/thread/3625631. – nyg

 Смежные вопросы

  • Нет связанных вопросов^_^