Update SelectOneMenu Primefaces (Resolvido)

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>

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;
	}

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

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.
:+1: