Задача с кнопкой Сохранить выдает ошибки проверки
У меня есть задача CAF webMethods, которая имеет большую форму с кнопкой сохранения и кнопкой отправки. Многие элементы формы имеют проверку. Пользователь должен иметь возможность нажать "Сохранить" и отправить форму в серверную модель, чтобы ее можно было сохранить в виде данных задачи, не вызывая проверки. Нажав Submit, вы должны запустить проверку.
Как я могу настроить страницу, чтобы сделать это. Это такое нормальное требование, и я застрял!
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 }); }
В каждом обязательном поле, кроме "Сохранить", привяжите атрибут 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;
}
Как я вижу, предложенный подход работает только в том случае, если форма содержит только поля строкового типа. Если есть какие-либо другие типы данных, такие как целое число, число с плавающей запятой, данные-время сопоставляются с полями пользовательского интерфейса и используется преобразование, то это может произойти сбой, если в эти поля будут введены неправильные данные.