Podstawy zależą od selectOneMenu i required = „true”

W mojej aplikacji mam trzy rozwijane menu (p:selectOneMenu), powiedzmy A, B, C. Wśród nich dwa są zależne, powiedzmy B i C. Zmieniając wartość B, dynamicznie ładuję wartości do C. Jest też pole tekstowe. Wartość pola tekstowego jest generowana przez ajax, gdy zdarzenie on-change rozpoczyna się od tych trzech list rozwijanych.

Oto xhtml:

<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" />

TheactivityTypeMenu iactivitySubTypeMenu są zależne od wybranej wartościactivityTypeMenu PopełniamactivitySubTypeMenu.

Teraz problemy, przed którymi stoję, to:

Powiedz, że wybrałem „Zewnętrzne” i „Wewnętrzne”activityTypeMenu i domyślnie „Wybierz jeden”. Jeśli wybiorę „Zewnętrzny” zactivityTypeMenu activitySubTypeMenu będzie mieć „Projekt” i „Usługa”. Ale jeśli wybiorę domyślny „Wybierz jeden”activitySubTypeMenu wciąż trzyma wcześniej dynamicznie wypełnione wartości. To dlatego, żerequired="true" atrybut oporny na odpalenie metody backend, z której ładuję wartość dynamiczną.Próbowałem ustawićitemValue z<f:selectItem itemLabel="Select One" itemValue="" /> do#{null} a następnie metoda zaplecza uruchamia się po wybraniu opcji „Wybierz jedną” i mogę ustawić pustą listę naactivitySubTypes i w ten sposóbactivitySubTypeMenu stać się pustym. Ale w tym przypadkurequired="true" robi się bez znaczenia. Mam na myśli także przycisk Zapisz i po kliknięciu tego przycisku bez wybrania jakiejkolwiek opcji (czyli wybranie „Wybierz jeden”) zactivityTypeMenu iactivitySubTypeMenu nie rzucaćValidatorException a komponenty nie są stylizowane przez klasę błędów css Primefaces.Także jeśli nie ustawięitemValue z<f:selectItem itemLabel="Select One" itemValue="" /> do#{null} następnie przy zmianie na wybraną wartość na opcję domyślną („Wybierz jedną”) nie usuwa sięactivityId p:inputText. Jeśli używam#{null} wtedy mogę uzyskać odpalanie metody backend, z której mogę ustawić wartość pola tekstowego na pustą.

Jak rozwiązać ten problem i uzyskać pożądany rezultat. Chcę:

Jeśli opcja jest ustawiona na „Wybierz jedną”, to zależne menu będzie puste i menu pola tekstowego.Chcę użyćrequired="true" atrybut.

questionAnswers(1)

yourAnswerToTheQuestion