2011-07-12 2 views
1

Я пытаюсь достичь аналогичной функциональности в ListGrid, которая уже существует для FormItems: com.smartgwt.client.widgets.form.validator.RequiredIfValidator.Как условно изменить атрибут ListGridField в SmartGWT?

Я хочу установить требуемый столбец на основе значения другого столбца. Т.е. мы получили ListGridFields A = «Нужно больше кофе? Если нет, то почему?» и B для ответа на вопрос. B не требуется, пока значение A не имеет определенного значения.

ListGrid grid = new ListGrid(); 
// Boolean 
ListGridField questionA = new ListGridField("questionA", "Need more coffee?"); 
questionA.setRequired(true); 
// String 
ListGridField reason = new ListGridField("reason", "Reason"); 
reason.setRequired(false); // should become true when A is not checked. 
grid.setFields(questionA, reason); 

Я попытался использовать один и тот же валидатор для ListGridField и получил валидатор огонь, но это не изменяет необходимый атрибут данного поля, независимо от того, что получает возвращается из метода RequiredIfFunction Выполнит().

Есть ли опрятный способ справиться с этим?

ответ

1

Хотя это имеет смысл, другой ответ на этот вопрос, эквивалентный myConditionalValidatedField.setRequired (myCheckBox.getValueAsBoolean()) в моем примере кода, не работает для меня. Я исправил проблему:

RequiredIfValidator validator = new RequiredIfValidator(); 
    validator.setExpression(new RequiredIfFunction() { 
     @Override 
     public boolean execute(FormItem formItem, Object value) { 
      return myCheckBox.getValueAsBoolean(); 
     } 
    }); 
    validator.setErrorMessage("Required field if 'myCheckBox' is checked"); 
    myConditionalValidatedField.setValidators(validator); 

Надеюсь, что поможет!

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