selectCheckboxMenu始终无法通过验证(空)

时间:2020-05-21 23:24:33

标签: jsf primefaces

我有一个带有select = true的selectCheckboxMenu,在其中设置了几个Entidades。之后,它根据我选择的Entidades(ManyToOne关系)填充另一个selectCheckboxMenu(Unidades)。 问题是,当我单击提交时,Primefaces说我的Unidades的selectCheckboxMenu是空的。

.xhtml:

<h:form>
    <h:panelGrid>
        <h:outputLabel for="entidades" value="Entidades"/>
        <p:selectCheckboxMenu id="entidades"
                              required="true"
                              multiple="true"
                              filter="true"
                              filterMatchMode="contains"
                              label="Selecione"
                              requiredMessage="Selecione uma ou mais entidades"
                              value="#{userBean.entidadesId}"
                              title="Marque as entidades nas quais o colaborador faz parte.">
            <p:ajax listener="#{userBean.onEntidadesChange}" update="unidades"/>
            <f:selectItems value="#{userBean.entidadesDisponiveis}"
                           var="entidade"
                           itemLabel="#{entidade.nome}"
                           itemValue="#{entidade.id}"/>
        </p:selectCheckboxMenu>

        <h:outputLabel for="unidades" value="Unidades"/>
        <p:selectCheckboxMenu id="unidades"
                              required="true"
                              multiple="true"
                              filter="true"
                              filterMatchMode="contains"
                              label="Selecione"
                              requiredMessage="Selecione uma ou mais unidades"
                              value="#{userBean.unidadesId}"
                              title="Marque as unidades nas quais o colaborador faz parte.">
            <f:selectItems value="#{userBean.unidadesDisponiveis}"
                           var="unidade"
                           itemLabel="#{unidade.nome}"
                           itemValue="#{unidade.id}"/>
        </p:selectCheckboxMenu>
    </h:panelGrid>
</h:form>
<p:commandButton action="#{userBean.cadastrarNovoUsuario}"
                 value="Cadastrar"/>

UserBean.java:

@Named
@RequestScoped
public class UserBean implements Serializable {

    private Long[] entidadesId;

    private Long[] unidadesId;

    private List<Unidade> unidadesDisponiveis;

    private List<Entidade> entidadesDisponiveis;

    @PostConstruct
    public void init() {
        entidadesDisponiveis = entidadeRepository.getEntidades();
    }

    public void onEntidadesChange(){
        if (entidadesId != null && entidadesId.length > 0) {
            unidadesDisponiveis = unidadeRepository.getUnidadesByEntidades(entidadesId);
        } else {
            unidadesDisponiveis = new ArrayList<>();
        }
    }

    public List<Entidade> getEntidadesDisponiveis() {
        return entidadesDisponiveis;
    }
    public List<Unidade> getUnidadesDisponiveis() {
        return unidadesDisponiveis;
    }

    public Long[] getEntidadesId() {
        return entidadesId;
    }

    public void setEntidadesId(Long[] entidadesId) {
        this.entidadesId = entidadesId;
    }

    public Long[] getUnidadesId() {
        return unidadesId;
    }

    public void setUnidadesId(Long[] unidadesId) {
        this.unidadesId = unidadesId;
    }

}

我注意到,如果我将# {#userBean.unidadesDisponiveis} 更改为 {#userBean.getUnidadesDisponiveis()} 并将其填充在 init( )方法,我可以通过验证,但随后将无法根据我在 selectCheckboxMenu id =“ entidades” 中选择的内容进行填充。

我做错了什么?

我正在使用Primefaces 8.0,并且通过Hibernate / C3P0从PostgreSQL获取数据。

0 个答案:

没有答案
相关问题