[RESOLVIDO]Erro com riquered Primefaces

Boa tarde.

Estou com um problema em um cadastro. O cadastro possui os campos como required, caso eu preencha todos os campos eu consigo salvar.

O problema é o seguinte: No cadastro eu possuo SelectOneMenu e um autoComplete, caso eu deixe o autoCompleto em branco não consigo dar submit no form, mas se eu deixar algum dos SelectOneMenu em branco a página dá um erro:

SEVERE: javax.el.PropertyNotFoundException: /pages/protected/defaultUser/dialogs/atendimento/cadastrarAtendimentoDialog.xhtml @69,54 itemLabel="#{cliente.razaoSocial}": Property 'razaoSocial' not found on type java.lang.Integer

O estranho que esse erro ocorre no autoComplete que está preenchido e não no SelectOneMenu que está “em branco”.

Segue os componentes:
AutoComplete

                     <h:outputLabel for="catSol" value="Postos/Outros:" />
				    <p:autoComplete id="catSol" minQueryLength="2" 
				    autocomplete="true"
				    size="40"
				    required="true"
				    requiredMessage="Campo Postos/Outros é Obrigatório"
                                    value="#{cadastrarClienteControle.cadastrarClienteMB.cadastroCliente.codigoCadastro}" 
                                    completeMethod="#{cadastrarClienteControle.completeClientes}" var="cliente"  
                                    itemLabel="#{cliente.razaoSocial}" itemValue="#{cliente.codigoCadastro}"
                                    queryDelay="1" />  
                     <h:outputLabel for="catSol" value="*Caso não seja um Cliente digite AUTOCOM" />

E um dos SelectOneMenu

<h:outputLabel for="catDest" value="Destinatário:" /> <p:selectOneMenu id="catDest" required="true" requiredMessage="Campo Destinatário é Obrigatório" value="#{cadastrarUsuarioControle.cadastrarUsuarioMB.usuario.codigoUsuario}"> <f:selectItem itemLabel="SELECIONE UM DESTINATÁRIO" itemValue="" /> <f:selectItems value="#{cadastrarUsuarioControle.usuarios}" /> </p:selectOneMenu>

Agradeço a ajuda!

lá no seu objeto tipo cliente, qual o tipo do atributo razaoSocial?

Boa tarde!

[quote=Cledsonjr]Boa tarde!

Só que no seu autocomplete vc me passa um Integer…Ou vc muda o autocomplete ou muda o model.

[quote=XOOM][quote=Cledsonjr]Boa tarde!

Só que no seu autocomplete vc me passa um Integer…Ou vc muda o autocomplete ou muda o model.[/quote]
Vlw pela resposta, mas está funcionando o cadastro o problema é na validação.

Caso eu não preencha um dos SelectOneMenu e tente gravar os dados a exeception aparece acusando erro no autoComplete.
Por algum motivo ele “perder a referência” do clientes.razaoSocial e diz que ela não existe mesmo eu a usando normalmente.

[quote=Cledsonjr][quote=XOOM][quote=Cledsonjr]Boa tarde!

Só que no seu autocomplete vc me passa um Integer…Ou vc muda o autocomplete ou muda o model.[/quote]
Vlw pela resposta, mas está funcionando o cadastro o problema é na validação.

Caso eu não preencha um dos SelectOneMenu e tente gravar os dados a exeception aparece acusando erro no autoComplete.
Por algum motivo ele “perder a referência” do clientes.razaoSocial e diz que ela não existe mesmo eu a usando normalmente.[/quote]

Hm…remove os selectOne e tenta salvar ou remove o autocomplete e tente salvar.

Para salvar ele funciona perfeitamente.

O meu problema está quando eu deixo o campo em branco, como essa é uma página de busca os campos podem ficar em branco.

Caso eu deixe um campo em branco dao seguinte erro:

Jan 28, 2013 10:04:26 AM com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit
SEVERE: javax.el.PropertyNotFoundException: /pages/protected/defaultUser/dialogs/atendimento/buscarAtendimentoDialog.xhtml @51,48 itemLabel="#{cliente.razaoSocial}": Property 'razaoSocial' not found on type java.lang.Integer

Não importa onde eu deixe em branco o erro sempre acontece no campo itemLabel="#{cliente.razaoSocial}".

Segue a página completa:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">
<h:body>
	<div id="divCadastro">
		<p:dialog header="Buscar Atendimento"
			widgetVar="dialogGerBuscarAtendimento" resizable="false"
			rendered="true" modal="true" id="dialogGerBuscarAtendimento"
			draggable="false" closable="true" appendToBody="false">
			<h:form id="cadastroBuscarAtendimento">
			<p:panel>Buscar Atendimento
			<p:separator />
					<h:panelGrid columns="3" cellspacing="10"
						columnClasses="label, value" styleClass="grid">

						<h:outputLabel for="catConvBuscar" value="Assunto:" />
						<p:selectOneMenu id="catConvBuscar"
							value="#{cadastrarAssuntoMB.assunto.codigoAssunto}">
							<f:selectItem itemLabel="SELECIONE UM ASSUNTO" itemValue="" />
							<f:selectItems value="#{cadastrarAssuntoControle.assuntos}" />
						</p:selectOneMenu>
						<h:outputLabel for="catSol"
							value="*Caso não seja um Cliente digite AUTOCOM" />

						<h:outputLabel for="catEmiBusca" value="Emitente:" />
						<p:selectOneMenu id="catEmiBusca"
							value="#{cadastrarUsuarioControle.cadastrarUsuarioMB.usuario.codigoUsuario}">
							<f:selectItem itemLabel="SELECIONE UM DESTINATÁRIO" itemValue="" />
							<f:selectItems value="#{cadastrarUsuarioControle.usuarios}" />
						</p:selectOneMenu>
						<h:outputLabel for="catSol" value="" />

						<h:outputLabel for="catDestBusca" value="Destinatário:" />
						<p:selectOneMenu id="catDestBusca"
							value="#{cadastrarUsuarioControle.cadastrarUsuarioMB.usuario.codigoUsuario}">
							<f:selectItem itemLabel="SELECIONE UM DESTINATÁRIO" itemValue="" />
							<f:selectItems value="#{cadastrarUsuarioControle.usuarios}" />
						</p:selectOneMenu>
						<h:outputLabel for="catSol" value="" />

						<h:outputLabel for="catSol" value="Postos/Outros:" />
						<p:autoComplete id="catSol" minQueryLength="2"
							size="40"
							value="#{cadastrarClienteControle.cadastrarClienteMB.cadastroCliente.codigoCadastro}"
							completeMethod="#{cadastrarClienteControle.completeClientes}"
							var="cliente" itemLabel="#{cliente.razaoSocial}"
							itemValue="#{cliente.codigoCadastro}" />
						<h:outputLabel for="catSol"
							value="*Caso não seja um Cliente digite AUTOCOM" />

						<h:outputLabel for="catSitBuscar" value="Situação:" />
						<p:selectOneMenu id="catSitBuscar"
							value="#{cadastrarAtendimentoMB.atendimento.situacaoAtendimento}">
							<f:selectItem itemLabel="SELECIONE A SITUAÇÃO" itemValue="" />
							<f:selectItems value="#{cadastrarAtendimentoControle.situacao}" />
						</p:selectOneMenu>
						<h:outputLabel for="catSol" value="" />
					</h:panelGrid>
					<h:panelGrid columns="3" cellspacing="5"
						columnClasses="label, value" styleClass="grid">

						<h:outputLabel for="catDestBuscar" value="Descrição/Solução:" />
						<h:inputTextarea id="descBuscar" rows="3" cols="40"
							value="#{cadastrarAtendimentoMB.atendimento.descricao}">
						</h:inputTextarea>
						<h:outputLabel for="catSol"
							value="*Digite palavras chave que você quer procurar" />
					</h:panelGrid>
				</p:panel>

				<p:commandButton value="Buscar"
					actionListener="#{cadastrarAtendimentoControle.buscarAtendimento}"
					update=":cadastroBuscarAtendimento, :growl"
					action="/pages/protected/defaultUser/normal/atendimento/visualizarBuscaAtendimentos.jsp"
					icon="ui-icon-check" />

				<p:commandButton value="Limpar" update=":cadastroBuscarAtendimento"
					actionListener="#{cadastrarAtendimentoControle.limparAtendimento}"
					icon="ui-icon-refresh" />

				<p:commandButton value="Sair" update=":cadastroBuscarAtendimento"
					icon="ui-icon-closethick"
					actionListener="#{cadastrarAtendimentoControle.limparAtendimento}"
					oncomplete="dialogGerBuscarAtendimento.hide()" />

			</h:form>
		</p:dialog>
	</div>
</h:body>
</html>

Entao quando voce nao seleciona nada ele da erro…hummm… coloca um breakpoint no metodo que entra logo ao submeter, se pelo menos ele entrar no metodo voce podera tratar isso facilmente. De antemao, acredito que voce esteja populando esse selectone com um tipo Integer e uma String, que seriam indice e descricao.

Flw!

[quote=rof20004]Entao quando voce nao seleciona nada ele da erro…hummm… coloca um breakpoint no metodo que entra logo ao submeter, se pelo menos ele entrar no metodo voce podera tratar isso facilmente. De antemao, acredito que voce esteja populando esse selectone com um tipo Integer e uma String, que seriam indice e descricao.

Flw![/quote]

Vlw, pela ajuda.

Então, fiz o breakpoint e consegui chegar até no método.

Segue os métodos para popular os SelectOneMenu:

Popular Assunto

	public Map<String, Object> getAssuntos() {
		assuntoItem = new LinkedHashMap<String, Object>();
		for (Iterator iter = cadastroAssuntoDAO.listarTodosAssuntos().iterator(); iter
				.hasNext();) {
			Assunto c = (Assunto) iter.next();
			assuntoItem.put(c.getNomeAssunto(), c.getCodigoAssunto());
		}
		return assuntoItem;
	}

Popular Emitente/Destinatário

	public Map<String, Object> getUsuarios() {
		usuarioItem = new LinkedHashMap<String, Object>();
		for (Iterator iter = cadastroUsuarioDAO.listarTodosUsuarios().iterator(); iter
				.hasNext();) {
			Usuario c = (Usuario) iter.next();
			usuarioItem.put(c.getLogin(), c.getCodigoUsuario());
		}
		return usuarioItem;
	}

AutoComplete

		  public List<CadastroCliente> completeClientes(String selecionarCliente){  
		        List<CadastroCliente> lsCliente = new ArrayList<CadastroCliente>();  
		        lsCliente = cadastroClienteDAO.buscarClienteNome(selecionarCliente);       
		          
		        return lsCliente;  
		          
		    } 

Quanto a atribuir no auto complete estou atribuindo itemValue="#{cliente.codigoCadastro}" a value="#{cadastrarClienteControle.cadastrarClienteMB.cadastroCliente.codigoCadastro}" que são ambos Integer.

dentro desse metodo:

#{cadastrarAtendimentoControle.buscarAtendimento}

Voce pode validar, se o usuario nao selecionou nada. Tipo assim:

[code]
if (selecao == null || selecao == 0){

// nao pesquisa, ou entao se for isso, passa null no parametro desse selectone.

}[/code]

E no DAO, se precisar, voce pode omitir esse campo.