Ich mache einen Bildschirm für Systembenutzerkonto mit Gruppenzuordnungen. Jeder Benutzer gehört zu der Gruppe, die registriert ist, wodurch der Zugriff auf Systemfunktionen eingeschränkt wird. Begrenzen längerer Arbeiten. Die Registrierung für neue Benutzer wurde direkt in der Bank vorgenommen, und wir stimmen zu, dass dies nichts Praktisches ist. Aber wenn versucht wird, die Gruppe für den Benutzer auszuwählen und zu einer Variablen zu wechseln, die die Gruppe speichert, wurde zur Liste der Benutzergruppen hinzugefügt, wobei der empfangene Betrag "null" ist, basierend auf einem Drucktest des empfangenen Werts. Ich bin recherchiert gegangen, aber überall, wo ich hinsehe, ist mein Code fast derselbe, ich bin mir absolut sicher, dass es ein Detail ist, das ich unbemerkt loslasse. Kannst du sehen, wo ich falsch liege?SelectItems gab null zurück
Ansicht Cadastro.class
<ui:composition template="/WEB-INF/tema/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui">
<f:metadata>
<o:viewParam name="usuario" value="#{cadastroUsuarioBean.usuario}" />
<f:event listener="#{cadastroUsuarioBean.inicializar}"
type="preRenderView" />
</f:metadata>
<ui:define name="titulo">#{cadastroUsuarioBean.editando ? 'Edição de Usuário' : 'Cadastro de Novo Usuário'}</ui:define>
<ui:define name="corpo">
<h:form id="frmUsuario">
<h1>#{cadastroUsuarioBean.editando ? 'Edição de Usuário' :
'Cadastro de Novo Usuário'}</h1>
<p:messages autoUpdate="true" closable="true" />
<p:toolbar style="margin-top:20px;">
<p:toolbarGroup>
<p:button value="Novo" icon="ui-icon-circle-plus" />
<p:commandButton value="Salvar" icon="ui-icon-disk"
id="botaoSalvar" action="#{cadastroUsuarioBean.salvar}"
update="@form" />
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:button value="Pesquisa" icon="ui-icon-circle-zoomin" />
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" style="width: 100%; margin-top: 20px;"
columnClasses="rotulo, campo, rotulo, campo">
<f:facet name="header">
Dados do Usuário do Sistema
</f:facet>
<p:outputLabel value="Matrícula:" for="matricula" />
<p:inputText id="matricula" size="5"
value="#{cadastroUsuarioBean.usuario.matricula}" />
<p:outputLabel value="Nome do Usuário:" for="nome" />
<p:inputText id="nome" size="50" maxlength="60"
value="#{cadastroUsuarioBean.usuario.nome}" />
<p:outputLabel value="Senha de Acesso:" for="senha1" />
<p:password id="senha1" match="senha2" label="Senha" feedback="true"
promptLabel="Digite sua senha" weakLabel="Fraca" goodLabel="Média"
strongLabel="Forte" />
<p:outputLabel value="Confirmação de senha:" for="senha2" />
<p:password id="senha2" value="#{cadastroUsuarioBean.usuario.senha}"
label="Confirmação de senha" />
<p:outputLabel value="E-mail:" for="email" />
<p:inputText id="email" size="50"
value="#{cadastroUsuarioBean.usuario.email}" />
############# Problema nessa parte ########
############# Inicio #####################
<p:outputLabel value="Grupo" for="grupo" />
<h:panelGroup>
<p:selectOneMenu id="grupo"
value="#{cadastroUsuarioBean.grupoSelecionado}"
style="width:160px;">
<f:selectItem itemLabel="Selecione ..." itemDisabled="true" />
<f:selectItems value="#{cadastroUsuarioBean.gruposRaizes}"
var="grupo" itemValue="#{grupo}" itemLabel="#{grupo.descricao}" />
</p:selectOneMenu>
<p:commandButton value="Adicionar ao grupo"
style="margin-top: 10px; width:160px; margin-left: 5px"
action="#{cadastroUsuarioBean.adicionarGrupo}" process="@this"
update="grupoTable" />
<p:dataTable value="#{cadastroUsuarioBean.listaGrupo}"
style="margin-top: 10px;"
emptyMessage="Usuário não pertence a nenhum grupo!"
id="grupoTable" var="item" rowIndexVar="linha">
<p:column headerText="Grupo" style="text-align: left; width: 100%">
<h:outputText value="#{item.descricao}" />
</p:column>
<p:column style="text-align: center; width: 50px;">
<p:commandButton icon="ui-icon-trash" title="Excluir" />
</p:column>
</p:dataTable>
########### Fim ########
</h:panelGroup>
</p:panelGrid>
</h:form>
</ui:define>
CadastroUsuarioBean.class
@Named
@ViewScoped
public class CadastroUsuarioBean implements Serializable {
private static final long serialVersionUID = 1L;
private Usuario usuario;
private List<Grupo> listaGrupo = new ArrayList<>();
@Inject
private Grupos grupos;
@Inject
private CadastroUsuarioService cadastroUsuarioService;
private Grupo grupoSelecionado;
private List<Grupo> gruposRaizes;
public CadastroUsuarioBean() {
limpar();
}
public void inicializar() {
if (FacesUtil.isNotPostback()) {
gruposRaizes = grupos.raizes();
}
}
public void salvar() {
this.usuario = cadastroUsuarioService.salvar(this.usuario);
// limpar();
FacesUtil.addInfoMessage("Usuário cadastrado com sucesso!");
}
private void limpar() {
usuario = new Usuario();
grupoSelecionado = new Grupo();
}
public void adicionarGrupo() {
System.out.println("Grupo selecionado: " + grupoSelecionado.getDescricao());
listaGrupo.add(grupoSelecionado);
}
public void removerGrupo(int linha){
listaGrupo.remove(linha);
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public boolean isEditando() {
return usuario.getMatricula() != null;
}
public List<Grupo> getGruposRaizes() {
return gruposRaizes;
}
public void setGruposRaizes(List<Grupo> gruposRaizes) {
this.gruposRaizes = gruposRaizes;
}
public Grupo getGrupoSelecionado() {
return grupoSelecionado;
}
public void setGrupoSelecionado(Grupo grupoSelecionado) {
this.grupoSelecionado = grupoSelecionado;
}
public List<Grupo> getListaGrupo() {
return listaGrupo;
}
public void setListaGrupo(List<Grupo> listaGrupo) {
this.listaGrupo = listaGrupo;
}
}
Grupos.class (Repository)
public class Grupos implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager manager;
public List<Grupo> raizes() {
return this.manager.createQuery("from Grupo", Grupo.class).getResultList();
}
public Grupo porId(Long id) {
return this.manager.find(Grupo.class, id);
}
}
Grupo.class
Erinnern, dass die Combobox korrekt ausgefüllt mit allen Namen der Gruppen, die auf der Tabellengruppe sind.
@Edit 19/07/2016
Ich weiß nicht, wenn sie nicht richtig, das Problem angegeben. Das Problem ist nicht der Wert in SelectItens angezeigt werden, sondern durch die "Gruppe hinzufügen" klicken:
<p:commandButton value="Adicionar ao grupo"
style="margin-top: 10px; width:160px; margin-left: 5px"
action="#{cadastroUsuarioBean.adicionarGrupo}" process="@this"
update="grupoTable" />
Wenn die Funktion aufrufen
public void adicionarGrupo() {
System.out.println("Grupo selecionado: " + grupoSelecionado.getDescricao());
listaGrupo.add(grupoSelecionado);
}
Bei der Anwendung Konsole ausgegeben: "Grupo selecionado: null" anstatt den Wert des Druckens, die in selectitens
mit dem null-Objekt ausgewählt wurde, ist es nicht möglich, die Datentabelle
<p:dataTable value="#{cadastroUsuarioBean.listaGrupo}"
style="margin-top: 10px;"
emptyMessage="Usuário não pertence a nenhum grupo!"
id="grupoTable" var="item" rowIndexVar="linha">
<p:column headerText="Grupo" style="text-align: left; width: 100%">
<h:outputText value="#{item.descricao}" />
</p:column>
<p:column style="text-align: center; width: 50px;">
<p:commandButton icon="ui-icon-trash" title="Excluir" />
</p:column>
</p:dataTable>
anzuzeigen
Sind Sie sicher, dass Ihre Liste initialisiert wird? –
ich auch nicht verstanden. [link] (http://i17.photobucket.com/albums/b87/forjefantasma/erro%20user.jpg) –