我有一个带有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获取数据。