Мы можем использовать bind_rows
после того, как имена столбцов будут одинаковыми
library(dplyr)
bind_rows(HolidayList, set_names(altSaturdayList, "Holidays"))
Или с rbind
rbind(HolidayList, setNames(altSaturdayList, "Holidays"))
Вы пытаетесь сделать проверку в редакторе связей. Это не цель редактора связей. Редактор связей, как предполагается, связывает параметры запроса с Вашим объектом поддержки, ничто больше. Редактор свойств преобразовывает Строки в объекты и наоборот - он не разработан, чтобы сделать что-либо еще.
Другими словами, необходимо рассмотреть разделение проблем - Вы пробуете к функциональности рожка для обуви в объект, который никогда не предназначался, чтобы сделать что-то большее чем преобразовать строку в объект и наоборот.
Вы могли бы рассмотреть разбивание Вашего объекта SSN в несколько, validateable поля, которые легко связываются (Строковые объекты, основные объекты как Даты, и т.д.). Таким образом, можно использовать блок проверки допустимости после привязки, чтобы проверить, что SSN корректен, или можно установить ошибку непосредственно. С редактором свойств Вы бросаете IllegalArgumentException, Spring преобразовывает его в ошибку несоответствия типов, потому что вот что это значит - строка не соответствует типу, который ожидается. Это - все, что это. Блок проверки допустимости, с другой стороны, может сделать это. Можно использовать пружину, обязывают тег связывать с вложенными полями, пока экземпляр SSN заполняется - он должен быть инициализирован с новым () сначала. Например:
<spring:bind path="ssn.firstNestedField">...</spring:bind>
Если Вы действительно хотите сохраниться на этом пути, однако, имейте свой редактор свойств, сохраняют список ошибок - если он должен бросить IllegalArgumentException, добавьте его к списку и затем бросьте IllegalArgumentException (выгода и повторно бросьте в случае необходимости). Поскольку можно создать редактор свойств в том же потоке как привязка, это будет ориентировано на многопотоковое исполнение при простом переопределении поведения значения по умолчанию редактора свойств - необходимо найти рычаг, который это использует, чтобы сделать, привязка, и переопределять его - делает ту же регистрацию редактора свойств, которую Вы делаете теперь (кроме того же метода, так, чтобы можно было сохранить ссылку на редактора), и затем в конце привязки, можно зарегистрировать ошибки путем получения списка от редактора при обеспечении общедоступного средства доступа. После того как список получен, можно обработать его и добавить ошибки соответственно.
Это звучит подобным проблеме, которую я имел с NumberFormatExceptions, когда значение для целочисленного свойства не могло быть связано, если бы, скажем, Строка вводилась в форму. Сообщение об ошибке на форме было универсальным сообщением для того исключения.
Решение состояло в том, чтобы добавить мой собственный пакет ресурса сообщения к моему контексту приложения и добавить мое собственное сообщение об ошибке для несоответствий типов на том свойстве. Возможно, можно сделать что-то подобное для IllegalArgumentExceptions на определенном поле.
Как сказано:
Я хочу, чтобы сообщение об ошибке , созданное PropertyEditor , отображалось в сообщении об ошибке в форме Spring
За кулисами Spring MVC использует стратегию BindingErrorProcessor для обработки ошибок отсутствующих полей и для преобразования PropertyAccessException в FieldError . Поэтому, если вы хотите переопределить стратегию BindingErrorProcessor Spring MVC по умолчанию, вы должны предоставить стратегию BindingErrorProcessor в соответствии с:
public class CustomBindingErrorProcessor implements DefaultBindingErrorProcessor {
public void processMissingFieldError(String missingField, BindException errors) {
super.processMissingFieldError(missingField, errors);
}
public void processPropertyAccessException(PropertyAccessException accessException, BindException errors) {
if(accessException.getCause() instanceof IllegalArgumentException)
errors.rejectValue(accessException.getPropertyChangeEvent().getPropertyName(), "<SOME_SPECIFIC_CODE_IF_YOU_WANT>", accessException.getCause().getMessage());
else
defaultSpringBindingErrorProcessor.processPropertyAccessException(accessException, errors);
}
}
Чтобы протестировать, давайте сделаем следующее.
Я думаю, вы могли бы просто попытаться поместить это в свой источник сообщения:
typeMismatch.person.ssn = Неверный формат SSN