Как условно изменить обязательный атрибут ListGridField в SmartGWT?

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

Я хочу установить требуемый столбец на основе значения другого столбца. Т.е. мы получили 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 и заставил валидатор сработать, но он не меняет обязательный атрибут поля, независимо от того, что возвращается из метода execute() RequiredIfFunction.

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


person Kimi    schedule 12.07.2011    source источник


Ответы (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);

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

person BrunoJCM    schedule 27.11.2012