Короче говоря, <f:viewParam>
пока не поддерживает список значений .
Подпись свойства cities
: List<String>
.
Обратите внимание, чтокогда мы пытаемся передать параметр для cities
(добавить ?cities=Dallas
в конец URL-адреса запроса), мы неожиданно получаем соответствующую ошибку преобразования в <h:messages/>
, заявляя:
ПреобразованиеОшибка установки значения «Даллас» для «нулевого конвертера».
Также в соответствии с ссылками на посты, мы также должны включать сообщения для обновлений AJAX:
<h:commandButton value="Submit">
<f:ajax execute="@form" render="output"/>
<f:ajax execute="@form" render="messages"/>
</h:commandButton>
При выполнении этого,не во время первого посещения, но, по крайней мере, при отправке мы получаем соответствующую ошибку:
Значение параметра «Ошибка преобразования» для «нулевого конвертера».
Яне знаете, почему <f:viewParam>
нужно устанавливать во время отправки в стиле ajax?
Чтобы решить, вы можете либо предоставить <f:converter>
, либо предоставить дополнительный метод получения / установки, который обрабатывает установку / получениетип Array или List, основанный на String.
Выбор быстрого решениядалее мы можем изменить <f:viewParam>
следующим образом:
<f:viewParam name="cities" value="#{myBean.citiesCsv}" />
В то время как для поддерживающего компонента мы добавим следующий метод:
public void setCitiesCsv(String csv) {
if (csv.isEmpty()) {
cities = new ArrayList<>();
} else {
cities =
Stream.of(csv.split(","))
.collect(Collectors.toCollection(ArrayList<String>::new));
}
}
Для повторных таких попыток нам, вероятно, следует рассмотретьвместо этого следует использовать соответствующий конвертер, который мы можем создать для простых преобразований CSV, если он соответствует нашей цели.
Похожие записи