Пропустить проверку условно, если выбран пустой f: selectItem в p / h: selectOneMenu

Родители:

<p:selectOneMenu id="parentList"
                 value="#{bean.selectedParent}"
                 converter="#{parentConverter}"
                 required="true">

        <f:selectItem itemLabel="Select" itemValue="#{null}"/>

        <f:selectItems var="parent"
                       value="#{bean.parentList}"
                       itemLabel="#{parent.parentName}"
                       itemValue="#{parent}"/>

        <p:ajax update="childrenList" listener="#{bean.setchildren}"/>
</p:selectOneMenu>

Дети :

<p:selectOneMenu id="childrenList"
                     value="#{bean.selectedchild}"
                     converter="#{childConverter}"
                     required="true">

        <f:selectItem itemLabel="Select" itemValue="#{null}"/>

        <f:selectItems var="child"
                       value="#{bean.childrenList}"
                       itemLabel="#{child.childName}"
                       itemValue="#{child}"/>
</p:selectOneMenu>

Управляемый боб:

@Named
@ViewScoped
public class Bean implements Serializable {

    @Inject
    private Service service;

    private Parent selectedParent;
    private Child selectedChild;
    private List<Parent> parentList;
    private List<Child> childrenList;

    private static final long serialVersionUID = 1L;

    public Bean() {}

    @PostConstruct
    private void init() {
        parentList = service.getParentList();

        // Not necessary unless selectedParent is already available in edit mode.
        if(selectedParent != null) {
            childrenList = service.getChildrenListByParent(selectedParent);
        }
    }

    public void setChildren() {
        if(selectedParent != null) {
            childrenList = service.getChildrenListByParent(selectedParent);
        } else {
            childrenList = null;
        }
    }

    // Getters and setters.
}

Список детей должен быть заполнен на основе их родителя, то есть список детей должен содержать только детей, связанных с конкретным родителем.

Когда первый родительский элемент в родительском списке выбран, список дочерних элементов должен быть сброшен на пустой, т. Е. Дочерние элементы не должны быть видны без их родительского элемента.

Поскольку в родительском списке есть обязательное поле проверки, оно вызывает проверку. Когда первый элемент в родительском списке выбран, дочерний список будет заблокирован для обновления из-заrequired="true", Технически нет ничего плохого, но существование детей без родителей может дать конечным пользователям плохой опыт.

Что должно произойти, если выбран первый элемент в родительском списке, он не должен вызывать проверку, то есть проверка должна быть пропущена условно.

Один из способов сделать это - проверитьselectedChild или жеchildrenList сам по себе является нулевым / пустым. Такие как,

required="#{empty selectedChild or empty childrenList}"

Но это не представляется каноническим способом условно пропустить проверку в таких случаях.

Существует ли лучший способ пропустить проверку, когда первый элемент в родительском списке выбран так, что список детей может быть очищен так же, как и родительский список (Проверка должна быть вызвана во всех других случаях. Например, когда сама форма подается либо синхронно, либо асинхронно)?

Ответы на вопрос(1)

Ваш ответ на вопрос