2016-07-18 2 views
0

Я создаю экран для учетной записи пользователя системы с групповыми назначениями. Каждый пользователь будет принадлежать зарегистрированной группе, тем самым ограничивая доступ к системным функциям. Ограничение дольше работает. Вся регистрация для нового пользователя осуществлялась непосредственно в банке, и мы согласны, что это ничего не практично. Но при попытке выбрать группу для пользователя и перейти к переменной, которая сохраняет группу, была выбрана для добавления в список групп пользователей, сумма, полученная тем же самым, была «нулевой» на основе теста печати полученного значения. Я прогуливался, но везде, где бы я ни выглядел, мой код почти такой же, я абсолютно уверен, что некоторые детали я оставляю незамеченными. Могли бы увидеть, где я ошибаюсь?SelectItems возвращается null

Посмотреть 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

@Entity 
@Table(name = "grupo") 
public class Grupo implements Serializable { 

private static final long serialVersionUID = 1L; 

private Long id; 
private String nome; 
private String descricao; 

@Id 
@GeneratedValue 
public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

@Column(nullable = false, length = 40) 
public String getNome() { 
    return nome; 
} 

public void setNome(String nome) { 
    this.nome = nome; 
} 

@Column(nullable = false, length = 80) 
public String getDescricao() { 
    return descricao; 
} 

public void setDescricao(String descricao) { 
    this.descricao = descricao; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((id == null) ? 0 : id.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Grupo other = (Grupo) obj; 
    if (id == null) { 
     if (other.id != null) 
      return false; 
    } else if (!id.equals(other.id)) 
     return false; 
    return true; 
} 
} 

Вспоминая, что поле со списком заполнено правильно со всеми именами групп, которые находятся в группе таблиц.

@Edit 19/07/2016

Я не знаю, если не правильно указали проблему. Проблема не отображает значение в SelectItens, но, нажав на кнопку «Добавить группу»:

<p:commandButton value="Adicionar ao grupo" 
       style="margin-top: 10px; width:160px; margin-left: 5px" 
       action="#{cadastroUsuarioBean.adicionarGrupo}" process="@this" 
       update="grupoTable" /> 

При вызове функции

public void adicionarGrupo() { 
    System.out.println("Grupo selecionado: " + grupoSelecionado.getDescricao()); 
    listaGrupo.add(grupoSelecionado); 
} 

В консоли приложения печатается: «Grupo selecionado: нуль» вместо того, чтобы печатать значение, которое было выбрано в selectitens

с нулевым объектом, не представляется возможное, чтобы отобразить Datatable

<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> 
+0

Вы уверены, что ваш список инициализирован? –

+0

так же не понял. [link] (http://i17.photobucket.com/albums/b87/forjefantasma/erro%20user.jpg) –

ответ

0

Я нашел решение, как он представлял, была деталью, которая оставалась незамеченной.

<p:commandButton value="Adicionar ao grupo" 
      style="margin-top: 10px; width:160px; margin-left: 5px" 
      action="#{cadastroUsuarioBean.adicionarGrupo}" process="@this" 
      update="grupoTable" /> 

Эта кнопка, которая отвечает за принятие ценности SelectItens перейти к переменной «grupoSelecionado» не обрабатывал компонент «SelectItem», но только сам.По этой причине значение переменной всегда было нулевым.

Я изменил кнопку, получая таким образом:

<p:commandButton value="Adicionar ao grupo" 
        style="margin-top: 10px; width:160px; margin-left: 5px" 
        action="#{cadastroUsuarioBean.adicionarGrupo}" process="grupo, @this " 
        update="grupoTable" /> 

Таким образом, проблема была решена, и теперь я не могу зарегистрировать пользователей системы на страницу, созданную и уже не непосредственно в базе данных.

Извините, что я английский, я все еще изучаю этот язык.

0

Я никогда не делал выделенного элемента на странице. Я всегда создавал функцию в бэкэнде.

Я использую значение на странице Xhtml так:

<p:selectOneMenu id="grupo" 
        value="#{cadastroUsuarioBean.grupoSelecionado}" 
        style="width:160px;"> 
        <f:selectItem itemLabel="Selecione ..." itemDisabled="true" /> 
        <f:selectItems value="#{cadastroUsuarioBean.getGroupRaizesSelectOne()}"/> 
       </p:selectOneMenu> 

getGroupRaizesSelectOne выглядит следующим образом:

function SelectItem[] getGroupRaizesSelectOne() 
{ 
    int len = this.groupRaizes.size(); 
    SelectItem[] selects = new SelectItem[len]; 

    for(Grupo group:gruopRaizes) 
    { 
     selects[i] = new SelectItem(group, group.getDescricao()); 
    } 

    return selects; 
} 

Мы также должны были иметь что-то линию Omni-грани, чтобы преобразовать наши объекты и позволить им для использования в качестве объекта на странице.

+0

Я всегда использую '' for ' getters ' – Kukeltje

+0

Я добавил более подробную информацию о проблеме. –

 Смежные вопросы

  • Нет связанных вопросов^_^