У меня есть задача CAF webMethods с большой формой с кнопкой сохранения и кнопкой отправки. Многие элементы формы проходят проверку. Пользователь должен иметь возможность нажать «Сохранить» и отправить форму в серверную модель, чтобы ее можно было сохранить как данные задачи без запуска проверки. Нажатие «Отправить» должно активировать проверку.

Как мне настроить страницу для этого? Это такое нормальное требование, и я застрял!

2
Rob Grant 9 Янв 2014 в 17:02

2 ответа

Лучший ответ

Это не очень весело.

  1. Дайте вашей кнопке "Сохранить" красивый идентификатор. Скажем, saveButton
  2. Создайте в своем Java-коде метод получения, который возвращает логическое значение. Внутри него верните true, если идентификатор кнопки является одним из отправленных полей, в противном случае - false:

    private boolean validationRequired() {
        return mapValueEndsWith((Map<String, String>)getRequestParam(),
            new String[] {
                "saveButton",           // Your save button
                "anotherButton",        // Perhaps another button also shouldn't validate
                "myForm:aThirdButton"   // perhaps you want to be specific to a form
            });
    }
    
  3. В каждом поле, которое должно быть обязательным, кроме Save, привяжите атрибут Validation-> required к вашему геттеру validationRequired.

Вот и все! Очень утомительно с большим количеством полей на экране, но работает.

P.s. что такое mapValueEndswith? Просто утилита; удалены пробелы для компактности:

private boolean mapValueEndsWith(Map<String, String> haystack, String[] needles) {
    for(String needle : needles) if(mapValueEndsWith(haystack, needle)) return true;
    return false;
}

private boolean mapValueEndsWith(Map<String, String> haystack, String needle) {
    for(String value : haystack.values()) if(value.endsWith(needle)) return true;
    return false;
}
2
Rob Grant 31 Мар 2015 в 12:22

Насколько я понимаю, предложенный подход работает только в том случае, если форма содержит только поля строкового типа. Если есть какие-либо другие типы данных, такие как integer, float, data-time, сопоставляются с полями пользовательского интерфейса и используется преобразование, тогда это может не сработать, если в эти поля введены неправильные данные.

-2
Raghava Rudrakanth P V 2 Апр 2015 в 11:37