ui:repeat: независимо от ошибки проверки внутренний компонент остается в действительном состоянии

Я хотел бы пометить один компонент в пределах ui:repeat как недействительный. Моя попытка:

Бин:

@Named
@RequestScoped
public class TestBean {
    private List<String> strLst;

    @PostConstruct
    public void init() {
        strLst = Arrays.asList("a", "b", "c");
    }

    public String send() {
        return null;
    }

    public List<String> getStrLst() {
        return strLst;
    }
}

Валидатор:

@FacesValidator(value = "TestValidator", managed = true)
public class TestValidator implements Validator<String> {
    @Override
    public void validate(FacesContext arg0, UIComponent comp, String foo) throws ValidatorException {
        throw new ValidatorException(new FacesMessage("Error"));
    }
}

Лицевая панель:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
  xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
</h:head>
<h:body>
<h:form>
  <h:messages />
  <!-- After validation error component keeps in state 'valid' - wrong! -->
  <ui:repeat var="str" value="#{testBean.strLst}">
    <h:inputText value="#{str}" validator="TestValidator"
      styleClass="#{component.valid ? 'foo' : 'error'}" />
  </ui:repeat>

  <!-- After validation error the component switches in state 'not valid' - correct! -->
  <h:dataTable var="str" value="#{testBean.strLst}">
    <h:column>
      <h:inputText value="#{str}" validator="TestValidator"
        styleClass="#{component.valid ? 'foo' : 'error'}" />
    </h:column>
  </h:dataTable>
  <h:commandButton action="#{testBean.send}" value="Send" />
</h:form>
</h:body>
</html>

Моя проблема: компонент в ui:repeat остается в состоянии valid, поэтому styleClass error не установлен. С h:dataTable таких проблем нет. Но мне нужен горизонтальный список, поэтому h:dataTable здесь не вариант.

введите здесь описание изображения

Также не работает с Omnifaces 1.14.1, как описано в https://stackoverflow.com/a/9195360/802058:

<ui:repeat var="str" value="#{testBean.strLst}">
  <h:inputText value="#{str}" styleClass="#{component.valid ? 'foo' : 'error'}">
    <o:validator validatorId="TestValidator" />
  </h:inputText>
</ui:repeat>

Это баг или фича?

Мохарра 2.3.9.SP01


person Toru    schedule 08.07.2020    source источник
comment
Тору забыл добавить ссылку на связанную проблему в список проблем Mojarra: github.com/ eclipse-ee4j/mojarra/issues/4539   -  person Kukeltje    schedule 20.07.2020
comment
Я думаю перейти на JSF 2.3. Это присутствует и в 2.2?   -  person erickdeoliveiraleal    schedule 21.07.2020