Простые лица зависят от selectOneMenu и required = «true»
В моем приложении у меня есть три выпадающих меню (p:selectOneMenu
), скажем, A, B, C. Среди них два зависят, скажем, B и C. Изменяя значение B, я динамически загружаю значения в C. Также есть текстовое поле. Значение текстового поля генерируется ajax, когда происходит событие on-change из этих трех выпадающих списков.
Вот этот HTML-файл:
<p:selectOneMenu id="customerMenu" value="#{adminController.activityDTO.customerId}" required="true" label="Customer Name" style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.customers}" var="customer" itemLabel="#{customer.customerName}" itemValue="#{customer.customerId}" />
<p:ajax listener="#{adminController.generateActivityName}" update="activityId" />
</p:selectOneMenu>
<p:selectOneMenu id="activityTypeMenu" value="#{adminController.activityDTO.activityParentType}" required="true" label="Activity Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activityTypes}" var="activityType" itemLabel="#{activityType.parent}" itemValue="#{activityType.parent}" />
<p:ajax listener="#{adminController.updateDependentActivity}" update="activitySubType" />
</p:selectOneMenu>
<p:selectOneMenu id="activitySubTypeMenu" value="#{adminController.activityDTO.activitySubType}" required="true" label="Activity Sub Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activitySubTypes}" var="activityType" itemLabel="#{activityType.name}" itemValue="#{activityType.id}" />
<p:ajax listener="#{adminController.generateActivityId}" update="activityId" />
</p:selectOneMenu>
<p:inputText id="activityId" autocomplete="off" readonly="true" value="#{adminController.activityDTO.activityId}"
label="#{adbBundle['admin.addActivityPanel.addActivityTable.activityId']}" required="true" />
activityTypeMenu
а такжеactivitySubTypeMenu
зависят от выбранного значенияactivityTypeMenu
Я заселяюactivitySubTypeMenu
.
Теперь проблемы, с которыми я сталкиваюсь:
Скажем, я выбрал «Внешний» и «Внутренний» вactivityTypeMenu
и по умолчанию «Выберите один». Если я выберу «Внешний» изactivityTypeMenu
activitySubTypeMenu
будет иметь «Проект» и «Сервис». Но тогда, если я выберу «Select One» по умолчанию,activitySubTypeMenu
все еще содержит ранее динамически заполненные значения. Это потому чтоrequired="true"
Атрибут Resisting для запуска метода бэкэнда, из которого я загружаю динамическое значение.Я пытался установитьitemValue
из<f:selectItem itemLabel="Select One" itemValue="" />
в#{null}
а затем бэкэнд-метод срабатывает при выборе опции «Выбрать один», и я могу установить пустой списокactivitySubTypes
и таким образомactivitySubTypeMenu
получить пустым. Но в этом случаеrequired="true"
становится бессмысленным. Я имею в виду, у меня также есть кнопка сохранения и при нажатии на эту кнопку, не выбирая никакой опции (то есть выбирая "Выбрать один") изactivityTypeMenu
а такжеactivitySubTypeMenu
не бросатьValidatorException
и компоненты не получают стиль с помощью класса ошибок css Primefaces.Также, если я не установлюitemValue
из<f:selectItem itemLabel="Select One" itemValue="" />
в#{null}
затем при изменении выбранного значения на значение по умолчанию («Выбрать один») не очищаетсяactivityId
p:inputText
, Если я использую#{null}
тогда я могу получить запуск метода бэкэнда, из которого я могу установить значение текстового поля пустым.Как я могу решить эти проблемы и получить желаемый результат. Что я хочу это:
Если для параметра установлено значение «Выбрать один», то зависимое меню будет пустым, а меню текстового поля.Я хочу использоватьrequired="true"
приписывать.