Вот моя конфигурация:Как отключить требуемый тег на selectOneMenu, когда p: ajax event = change?
- PrimeFaces: 4.0.4 (элита)
- OmniFaces: 1.6.3
- JSF: MyFaces 2.0.2
- сервер: WebSphere 8.5.0.2
часть кода (я только вывесить соответствующую часть для большей ясности):
<p:selectOneMenu value="#{viewModel.selectedContact}" required="true" converter="omnifaces.SelectItemsConverter">
<p:ajax event="change" listener="#{viewModel.updateContact}" update="area"/>
<f:selectItem itemValue="#{null}" itemLabel="#{msg.no_contact}" noSelectionOption="true" />
<f:selectItems value="#{viewModel.contacts}"/>
</p:selectOneMenu>
Итак, у нас есть простой p:selectOneMenu
, который содержит список объектов Contact
, а также вариант «Без контакта». Это поле необходимо, если я хочу отправить форму.
Когда контакт выбран в списке, вызывается метод updateContact
. Этот метод будет генерировать данные, которые будут отображаться в разделе area
страницы, обновленной по вызову AJAX.
Если я выбираю опцию «Нет контакта», то возникает ошибка проверки, так как это поле не требуется, поэтому метод updateContact
не вызывается. Я хотел бы, чтобы метод вызывался, поскольку мне нужно было бы сбросить некоторые данные, а затем скрыть раздел area
страницы.
Я пробовал использовать process="@this"
, immediate="true"
, но он не работает. С immediate="true"
выбранный Contact
не передается методу updateContact
.
Итак, что является лучшим способом обойти проверку этого поля при выборе нулевого значения?
Что вы предлагаете, это хорошее решение. Однако у меня есть замечание. Все мои обязательные поля в форме имеют связанный 'p: outputLabel' с атрибутом' for'. Это означает, что рядом с ними будет отображаться небольшая звезда (*), показывая пользователю эти поля. Если я использую ваше решение, эти звезды больше не отображаются. Пользователь увидит их только после отправки формы. – Nasedo47
См. Обновленный ответ. – BalusC
Блестящий! Большое спасибо! Именно то, что мне нужно. – Nasedo47