Erro ao receber valor em um selectOneMenu

10 respostas
rtva

Ola,
Tenho uma tabela e ao clicar em editar recebo os valores da tabela em um form, o problema é que não estou conseguindo colocar o valor em um campo selectOneMenu.
Estou usando prime3 e jsf2

.xhtm

<h:form id="form">
		<p:panel header="Pacientes">
			<p:growl id="growl" showDetail="true" sticky="true" />
			<p:fieldset legend="Cadastro" toggleable="true" collapsed="true">
				<h:panelGrid columns="2">

					<h:outputLabel value="Serviço:" for="service" />
					<p:inputText id="service" label="servico" value="#{clientBean.client.service}" maxlength="100" size="40" />

					<h:outputLabel for="procedure" value="Procedimento:" />
					<p:selectOneMenu id="procedure" value="#{clientBean.client.procedure.description}" converter="Procedure" effect="fade">
						<f:selectItem itemLabel="Selecione" itemValue="" />
						<f:selectItems value="#{procedureBean.procedures}" var="proc" itemLabel="#{proc.description}" itemValue="#{proc.id}" />
					</p:selectOneMenu>

					<h:outputLabel for="agreement" value="Convênio:" />
					<p:selectOneMenu id="agreement" value="#{clientBean.client.agreement}" effect="fade" >
						<f:selectItem itemLabel="Selecione" itemValue="" />
						<f:selectItems value="#{agreementBean.agreements}" var="agree" itemLabel="#{agree.description}" itemValue="#{agree.id}" />
					</p:selectOneMenu>

					<h:outputLabel value="Pago" for="pg" />
					<p:selectOneMenu id="pg" value="#{clientBean.client.pg}">
						<f:selectItem itemLabel="Não" itemValue="0" />
						<f:selectItem itemLabel="Sim" itemValue="1" />
					</p:selectOneMenu>

					<p:commandButton id="btnSalvar" value="Salvar" actionListener="#{clientBean.salvar}" update="form" />
				</h:panelGrid>
			</p:fieldset>
			
			<p:dataTable id="tabela" value="#{clientBean.clients}" var="cli" emptyMessage="Nenhum registro encontrado." paginator="true" rows="10" > 
				<f:facet name="header">  
                    Lista de Clientes  
                </f:facet>
				<p:column headerText="Convênio" style="width:20%">
					<h:outputText value="#{cli.agreement.description}" styleClass="dataStyle" />
				</p:column>
				<p:column headerText="Procedimento" style="width:20%">
					<h:outputText value="#{cli.procedure.description}" styleClass="dataStyle" />
				</p:column>
				<p:column headerText="Pago" style="width:5%">
					<h:outputText value="#{cli.pg == '1' ? 'Sim' : 'Não'}" styleClass="dataStyle" />
				</p:column>

				<p:column style="text-align: center; width:15%">
					<p:commandButton action="#{clientBean.editar}" icon="ui-icon-pencil" ajax="false">
						<f:setPropertyActionListener value="#{cli}" target="#{clientBean.client}" />
					</p:commandButton>

					<p:commandButton icon="ui-icon-trash" onclick="confirmation.show()" style="margin-left: 5px">
						<f:setPropertyActionListener value="#{cli}" target="#{clientBean.client}" />
					</p:commandButton>
				</p:column>

			</p:dataTable>

		</p:panel>
	</h:form>

Se alguém puder me ajudar fico agradecido.

Obrigado

10 Respostas

tmvolpato

deixa eu ver se entendi

qdo vc clica em editar o seu selectOneMenu vem vazio é isso?

se for um erro poste ai o log

R
<h:outputLabel for="agreement" value="Convênio:" />  
  <p:selectOneMenu id="agreement" value="#{clientBean.client.agreement.id}" effect="fade" >  //coloca aqui a id
          <f:selectItem itemLabel="Selecione" itemValue="" />              
<f:selectItems value="#{agreementBean.agreements}" var="agree" itemLabel="#{agree.description}" itemValue="#{agree.id}" />  
          </p:selectOneMenu>

Acho que isso resolve o problema.
Caso não resolva, posta o bean para verificarmos, por favor!

Polverini

mostra algum erro ??? o conversor esta funcionando certinho ?

rtva

tmvolpato

Não necessáriamente vazio, mas com o valor padrão “Selecione” ao invés do valor que foi selecionado.

Caso eu deixe assim:

<h:outputLabel for="procedure" value="Procedimento:" />
					<p:selectOneMenu id="procedure" value="#{clientBean.client.procedure.description}" effect="fade">
						<f:selectItem itemLabel="Selecione" itemValue="" />
						<f:selectItems value="#{procedureBean.procedures}" var="proc" itemLabel="#{proc.description}" itemValue="#{proc.id}" />
					</p:selectOneMenu>

					<h:outputLabel for="agreement" value="Convênio:" />
					<p:selectOneMenu id="agreement" value="#{clientBean.client.agreement.description}" effect="fade" >
						<f:selectItem itemLabel="Selecione" itemValue="" />
						<f:selectItems value="#{agreementBean.agreements}" var="agree" itemLabel="#{agree.description}" itemValue="#{agree.id}" />
					</p:selectOneMenu>

Temos o erro na hora de carregar a página:

javax.el.PropertyNotFoundException: /clientImpl.xhtml @35,103 value="#{clientBean.client.procedure.description}": Target Unreachable, 'procedure' returned null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)

Olha o Bean.

@ManagedBean
@SessionScoped
public class ClientBean implements Serializable{
	
	private Client client = new Client();
	private List<Client> clients = new ArrayList<Client>();
    private ClientDao dao = new ClientDaoImpl();

    public ClientBean() {
    	clients = dao.consultar();
    }

    public void salvar() {
    	dao.save(client);
    	client = new Client();
    	clients = dao.consultar();
    	geraMsg("Registro Salvo com Sucesso");
    }

    public void editar() {
    	client = dao.getById(client.getId());
    }

    public void excluir() {
    	dao.delete(client);
    	clients = dao.consultar();
    	geraMsg("Registro Excluido com Sucesso");
    }

    public Client getClient() {
        return client;
    }

    public void setClient(Client client) {
        this.client = client;
    }

    public List getClients() {
        return clients;
    }

    public void setClients(List clients) {
        this.clients = clients;
    }
    
    private void geraMsg(String mensagem){
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso:", mensagem));
    }

}

Se precisarem de mais me avisem.

Polverini

experimenta deixar assim:

<h:outputLabel for="procedure" value="Procedimento:" />  
                        <p:selectOneMenu id="procedure" value="#{clientBean.client.procedure.description}" effect="fade">  
                            <f:selectItems value="#{procedureBean.procedures}" var="proc" itemLabel="#{proc.description}" itemValue="#{proc.id}" />  
                        </p:selectOneMenu>  
      
                        <h:outputLabel for="agreement" value="Convênio:" />  
                        <p:selectOneMenu id="agreement" value="#{clientBean.client.agreement.description}" effect="fade" >  
                            <f:selectItems value="#{agreementBean.agreements}" var="agree" itemLabel="#{agree.description}" itemValue="#{agree.id}" />  
                        </p:selectOneMenu>
rtva

Ainda o mesmo erro.

Eu não consegui ver a diferença do seu código com o meu

Mesmo assim obrigado

Polverini

eu tive o mesmo problema que vc, o que eu retirei foi a linha que continha:

<f:selectItem itemLabel="Selecione" itemValue="" />

ed. eita fui testar aqui e funcionou normalmente

C

Olá acho que o problema esta no conversor, eu utilizo assim :

<p:selectOneMenu value="#{pedidoVendasFace.selectedBean.condpagamento}" style="width: 150px;">
                    <f:selectItems var="itemSel" itemLabel="#{itemSel.descricao}"  itemValue="#{itemSel}" value="#{pedidoVendasFace.allCondPagamento}"/>
                    <f:converter converterId="condPagamentoConverter"/>
           </p:selectOneMenu>
rtva

nada ainda :frowning:

rtva

Resolvido.

Dentro do meu Bean criei

private long selectedProcedure;
    private long selectedAgreement;

Ao chamar o editar dou um set nesses valores e na chamada da página fica

<h:outputLabel for="procedure" value="Procedimento:" />
					<p:selectOneMenu id="procedure" value="#{clientBean.selectedProcedure}" effect="fade">
						<f:selectItem itemLabel="Selecione" itemValue="" />
						<f:selectItems value="#{procedureBean.procedures}" var="proc" itemLabel="#{proc.description}" itemValue="#{proc.id}" />
					</p:selectOneMenu>

					<h:outputLabel for="agreement" value="Convênio:" />
					<p:selectOneMenu id="agreement" value="#{clientBean.selectedAgreement}" effect="fade" styleClass="dataStyle" >
						<f:selectItem itemLabel="Selecione" itemValue="" />
						<f:selectItems value="#{agreementBean.agreements}" var="agree" itemLabel="#{agree.description}" itemValue="#{agree.id}" />
					</p:selectOneMenu>

Obrigado a todos

Criado 4 de julho de 2012
Ultima resposta 6 de jul. de 2012
Respostas 10
Participantes 5