Я только что обновился до JSF 2.3 и Wildfly 14 (с 2.0 и 13) и Primefaces 6.2.5.
Я заметил странное поведение при использовании командной кнопки. У меня есть 2 формы, и при нажатии кнопки первой формы ввод второй формы подтверждается, и ошибка (в данном случае требуемые ошибки) отображается в сообщении p::
<h:form id = "form1" prependId = "false">
<p:commandButton id = "save" value = "Save" actionListener = "#{myBean.save()}" update = "@form">
<f:actionListener binding = "#{myBean.reloadResults()}" />
</p:commandButton>
<p:messages id = "msgs" severity = "error,warn" escape = "false">
<p:autoUpdate />
</p:messages>
...
</h:form>
<p:dialog >
<h:form id = "form2" >
<p:messages severity = "error,warn" escape = "false">
<p:autoUpdate />
</p:messages>
<div>
<p:calendar id = "myDate" value = "#{myBean.myDate}" required = "true" />
</div>
...
</h:form>
</p:dialog>
Я ожидал, что будет обработано и проверено только содержимое первой формы. Так было с wildfly 13 и jsf 2.0.
Любая идея?
Вы не указали процесс атрибута в своей командной кнопке. Значение по умолчанию - @all, которое будет проверять все формы. Пожалуйста, используйте process = "@ form", чтобы избежать проверки и обработки другой формы.
Обновленный код выглядит следующим образом:
<p:commandButton id = "save" value = "Save" actionListener = "#{myBean.save()}" update = "@form" process = "@form">
<f:actionListener binding = "#{myBean.reloadResults()}" />
</p:commandButton>
Я должен извиниться за то, что не опубликовал весь код, но он был бы слишком большим. Я выяснил, в чем проблема. Это связано с этой ошибкой:
https://github.com/primefaces/primefaces/issues/4122
У меня есть сетка из 4 столбцов, но с 10 элементами.
Тогда вся связь ajax была прервана. Исправление появится в PF 6.3
Вы никогда не должны публиковать «весь код», но всегда создавайте минимальный воспроизводимый пример ... То есть в 99,9% случаев никогда не бывает больших.
Избавьтесь от
prependId = "false"
. Это плохая практика. Затем попробуйте еще раз.