Tenho um p:commandButton no qual chama um dialog mostrando os dados de um dataTable que foi selecionado.
Quando realizo o update, todos os inputs aparecem normalmente, porém o selectonemenu não traz registro algum.
p:commandButton
<p:commandButton value="Alterar"
onclick="PF('dlgDetalhesUsuario').show()"
update=":frmDetalhesUsuario" />
p:dialog
<p:dialog widgetVar="dlgDetalhesUsuario" id="dlgDetalhesUsuario"
modal="true" header="Dados cadastrais - usuário" resizable="false"
width="80%">
<h:form id="frmDetalhesUsuario">
<p:growl id="growl01" showDetail="true" />
<p:panel id="pnDetalhesUsuario">
<p:panelGrid columns="2" id="pgDetalhesUsuario"
style="border:0px !important; background:none;"
styleClass="ui-panelgrid-blank">
<p:column>
<h:outputLabel value="Código" />
<p:inputText disabled="true"
value="#{usuarioMB.usuario.codigo}" id="txtCodigo" />
</p:column>
<p:column>
<h:outputLabel value="Nome" />
<p:inputText value="#{usuarioMB.usuario.nome}" id="txtNome" />
</p:column>
<p:column>
<h:outputLabel value="Login" />
<p:inputText value="#{usuarioMB.usuario.login}" id="txtLogin" />
</p:column>
<p:column>
<h:outputLabel value="Senha" />
<p:inputText type="password"
value="#{usuarioMB.usuario.senha}" id="txtSenha" />
</p:column>
<p:column>
<h:outputLabel value="Loja padrão" />
<p:inputText value="#{usuarioMB.usuario.loja.codigo}"
id="txtLojaPadrao" />
</p:column>
<p:column>
<h:outputLabel value="Perfil" />
<p:selectOneMenu id="car"
value="#{usuarioMB.usuario.loja.codigo}">
<f:selectItem itemLabel="Selecione um" itemValue="#{NULL}" />
<f:selectItems value="#{entregaMB.lojas}" var="loja"
itemLabel="#{loja.fantasia}" itemValue="#{loja.codigo}" />
</p:selectOneMenu>
</p:column>
</p:panelGrid>
</p:panel>
</h:form>
</p:dialog>
Mike
#2
Isso funciona mesmo?
Se você não quer que seja selecionado, apenas usa o atributo noSelectionOption=“true”
Checa se “#{entregaMB.lojas}” não esta vazio
Posta o restando do codigo, so o dialog n ajuda mt
Olá Mike,
Então, sempre utilizei o #{NULL} e vinha funcionando, mas fiz essa alteração que você comentou.
Segue o código do meu XHTML.
<h:form id="formAlterarSenha">
<p:growl id="growl" showDetail="true" />
<p:dataTable widgetVar="usuariosDT" id="usuariosDT" var="usuario"
value="#{usuarioMB.usuarios}" rows="10" paginator="true"
selectionMode="single" emptyMessage="Nenhum usuário encontrado"
selection="#{usuarioMB.usuario}" rowKey="#{usuario.codigo}">
<p:column headerText="Código">
<h:outputLabel value="#{usuario.codigo}" />
</p:column>
<p:column headerText="Nome">
<h:outputLabel value="#{usuario.nome}" />
</p:column>
<p:column headerText="Login">
<h:outputLabel value="#{usuario.login}" />
</p:column>
</p:dataTable>
<p:panelGrid columns="2"
style="border:0px !important; background:none;"
styleClass="ui-panelgrid-blank">
<p:commandButton value="Alterar"
onclick="PF('dlgDetalhesUsuario').show()"
update=":frmDetalhesUsuario" />
</p:panelGrid>
</h:form>
<p:dialog widgetVar="dlgDetalhesUsuario" id="dlgDetalhesUsuario"
modal="true" header="Dados cadastrais - usuário" resizable="false"
width="80%">
<h:form id="frmDetalhesUsuario">
<p:growl id="growl01" showDetail="true" />
<p:panel id="pnDetalhesUsuario">
<p:panelGrid columns="2" id="pgDetalhesUsuario"
style="border:0px !important; background:none;"
styleClass="ui-panelgrid-blank">
<p:column>
<h:outputLabel value="Código" />
<p:inputText disabled="true"
value="#{usuarioMB.usuario.codigo}" id="txtCodigo" />
</p:column>
<p:column>
<h:outputLabel value="Nome" />
<p:inputText value="#{usuarioMB.usuario.nome}" id="txtNome" />
</p:column>
<p:column>
<h:outputLabel value="Login" />
<p:inputText value="#{usuarioMB.usuario.login}" id="txtLogin" />
</p:column>
<p:column>
<h:outputLabel value="Senha" />
<p:inputText type="password"
value="#{usuarioMB.usuario.senha}" id="txtSenha" />
</p:column>
<p:column>
<h:outputLabel value="Loja padrão" />
<p:inputText value="#{usuarioMB.usuario.loja.codigo}"
id="txtLojaPadrao" />
</p:column>
<p:column>
<h:outputLabel value="Perfil" />
<p:selectOneMenu id="car"
value="#{usuarioMB.usuario.loja.codigo}">
<f:selectItem itemLabel="Selecione um"
noSelectionOption=“true” />
<f:selectItems value="#{entregaMB.lojas}" var="loja"
itemLabel="#{loja.fantasia}" itemValue="#{loja.codigo}" />
</p:selectOneMenu>
</p:column>
</p:panelGrid>
</p:panel>
</h:form>
</p:dialog>
E meu Bean está assim
@Named
@ViewScoped
public class UsuarioMB implements Serializable {
private static final long serialVersionUID = 1L;
SqlSession connPostgres;
String novaSenha;
private List<Usuario> usuarios;
@Inject
private UsuarioService usuarioService;
@Inject
private LoginMB sessao;
@Inject
private Usuario usuario;
@Inject
private LojaService lojaService;
@PostConstruct
private void init() {
this.connPostgres = sessao.getConnPostgres();
this.usuarios = usuarioService.findAll(connPostgres);
}
public List<Loja> getLojas() {
List<Loja> lojas = lojaService.todas(connPostgres);
return lojas;
}
Mike
#4
No seu selectOneMenu, você chama entregaMB.lojas para popula-lo, mas seu bean UsuarioMB que possui o método getLojas
Na verdade eu tinha colocado nos dois para testar, pois não conseguia popular.
Mas estou achando que foi aquele #{NULL} que estava quebrando o código e não me mostrava nada, pois fiz a alteração e funcionou…
Obrigado pela ajuda.
1 curtida
Mike
#6
Que bom que deu certo, eu nunca tinha visto #{NULL} ai suspeitei de cara haha.
Põe resolvido no tópico, pode ser que ajude alguém.
