Задача с кнопкой Сохранить выдает ошибки проверки

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

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

2 ответа

Решение

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

  1. Дайте вашей кнопке Сохранить хороший идентификатор. Скажи, сохранить кнопку
  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. В каждом обязательном поле, кроме "Сохранить", привяжите атрибут Validation->required к получателю validationRequired.

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

Ps что такое 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;
}

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

Другие вопросы по тегам