Problema no autocomplete do primefaces

6 respostas
E

Bom dia,

Estou usando JSF primefaces.

Tenho um cadastro de eventos e para facilitar coloquei dentro de um wizard. A primeira etapa tenho um cadastro geral, na segunda tenho o cadastro do local, nesta etapa tenho um autocomplete. O problema é se não preecher o local e voltar para a etapa anterior, quando volto para local, aparece um NULL no autocomplete.

Alguém já passou por isso?

<h:form prependId="false" id="dataForm" acceptcharset="ISO-8859-1">
		<p:messages id="messages" />
		<p:wizard widgetVar="wiz" flowListener="#{eventoBean.onFlowProcess}"
			nextLabel="Próximo" backLabel="Anterior" step="geral" id="idWizard">

			<p:tab id="geral" title="Geral">
				<p:panel>
					<h:outputText
						value="Aqui você deve passar informações gerais sobre o evento." />
				</p:panel>
				<p:panel id="data">
					<p:focus context="infGeraisPanelGrid" />
					<h:panelGrid id="infGeraisPanelGrid"
						columns="#{eventoBean.usuario.ajuda ? 5 : 4}" styleClass="dialog">

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('TITULO')}"
							value="" />
						<h:outputText id="tituloCreateOutput"
							value="#{messages.evento_cadastro_titulo}" />
						<p:inputText id="tituloCreateInput"
							label="#{messages.evento_cadastro_titulo_label}"
							value="#{eventoBean.evento.titulo}" required="true" size="50"
							maxlength="250" requiredMessage="Informe o Titulo do evento.">
							<p:focus for="tituloCreateInput" />
						</p:inputText>
						<p:tooltip for="tituloCreateInput"
							value="Título do evento. Este campo deve conter no máximo 50 caracteres."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="tituloCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('DESCRICAO')}"
							value="" />
						<h:outputText id="descricaoCreateOutput" value="Descrição: *" />
						<p:inputTextarea id="descricaoCreateInput"
							value="#{eventoBean.evento.descricao}" required="true"
							requiredMessage="Informe uma descrição deste evento." cols="70"
							rows="4" />
						<p:tooltip for="descricaoCreateInput" value="Descrição do evento"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="descricaoCreateInput" />


						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('PROGRAMACAO')}"
							value="" />
						<h:outputText id="programacaoCreateOutput"
							value="#{messages.evento_cadastro_programacao}" />
						<p:inputTextarea id="programacaoCreateInput"
							label="#{messages.evento_cadastro_programacao_label}"
							value="#{eventoBean.evento.programacao}" rows="4" cols="70" />
						<p:tooltip for="programacaoCreateInput"
							value="Programação - Atrações do evento. Informe todas as Atrações do evento nesse campo."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="programacaoCreateInput" />


						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('INGRESSO')}"
							value="" />
						<h:outputText id="ingressoCreateOutput"
							value="#{messages.evento_cadastro_ingresso}" />
						<p:inputTextarea id="ingressoCreateInput"
							label="#{messages.evento_cadastro_ingresso_label}"
							value="#{eventoBean.evento.ingresso}" required="true" rows="4"
							cols="70" requiredMessage="Informe o valor do ingresso." />
						<p:tooltip for="ingressoCreateInput"
							value="Informe o valor do ingresso."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="ingressoCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('DATA_EVENTO')}"
							value="" />
						<h:outputText id="dataEventoCreateOutput"
							value="#{messages.evento_cadastro_data_hora}" />
						<p:calendar id="dataEventoCreateInput"
							label="#{messages.evento_cadastro_data_hora_label}"
							value="#{eventoBean.evento.dataEvento}" required="true"
							pattern="dd/MM/yyyy HH:mm"
							requiredMessage="Informe a data do evento">
							<p:ajax event="blur" listener="#{eventoBean.handleDataEvento}"
								update="messages" />
						</p:calendar>
						<p:tooltip for="dataEventoCreateInput"
							value="Data e Hora do evento."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="dataEventoCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('DATA_PUBLICACAO')}"
							value="" />
						<h:outputText id="dataPublicacaoCreateOutput"
							value="Data Publicação" />
						<p:calendar id="dataPublicacaoCreateInput"
							value="#{eventoBean.evento.dataPublicacao}"
							pattern="dd/MM/yyyy HH:mm" required="true"
							requiredMessage="Informe a data da publicação">
							<p:ajax event="blur"
								listener="#{eventoBean.handleDataPublicacao}" update="messages" />
						</p:calendar>
						<p:tooltip for="dataPublicacaoCreateInput"
							value="Data e Hora para inciar a publicação."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="dataPublicacaoCreateInput"
							id="dataPublicacaoMessage" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('FACEBOOK')}"
							value="" />
						<h:outputText id="facebookCreateOutput"
							value="#{messages.evento_cadastro_facebook}" />
						<p:selectBooleanCheckbox id="facebookCreateInput"
							label="#{messages.evento_cadastro_facebook_label}"
							value="#{eventoBean.evento.facebook}" required="true" />
						<p:tooltip for="facebookCreateInput"
							value="Deseja publicar no facebook?"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="facebookCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('TWITTER')}"
							value="" />
						<h:outputText id="twitterCreateOutput"
							value="#{messages.evento_cadastro_twitter}" />
						<p:selectBooleanCheckbox id="twitterCreateInput"
							label="#{messages.evento_cadastro_twitter_label}"
							value="#{eventoBean.evento.twitter}" required="true" />
						<p:tooltip for="twitterCreateInput"
							value="Deseja publicar no twitter?"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="twitterCreateInput" />
					</h:panelGrid>
				</p:panel>
			</p:tab>
			<p:tab id="infLocal" title="Local">
				<p:panel>
					<h:outputText value="Local onde ocorrerá o evento. " />
				</p:panel>
				<p:panel>
					<p:panelGrid id="infEventoPanelGrid"
						columns="#{eventoBean.usuario.ajuda ? 5 : 4}" styleClass="dialog">

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('LOCAL')}"
							value="" />
						<h:outputText id="localCreateOutput"
							value="#{messages.evento_cadastro_local}" />
						<p:autoComplete id="localCreateAutoComplete"
							value="#{eventoBean.evento.local}" 
							completeMethod="#{eventoBean.autoComplete}"
							requiredMessage="Informe o local do evento!"
							converter="localConverter" required="true" size="40"
							minQueryLength="3" var="local" itemLabel="#{local.local}"
							itemValue="#{local}" maxlength="100">
							<p:ajax event="blur"
								update="cepCreateInput,numeroCreateInput,enderecoCreateInput,bairroCreateInput,cidadeCreateInput,telefone1CreateInput,telefone2CreateInput" />
						</p:autoComplete>
						<p:tooltip for="localCreateAutoComplete"
							value="Informe o nome do local onde acorerá o evento."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="localCreateAutoComplete" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('CEP')}" value="" />
						<h:outputText id="cepCreateOutput"
							value="#{messages.evento_cadastro_cep}" />
						<p:inputMask id="cepCreateInput"
							label="#{messages.evento_cadastro_cep_label}"
							value="#{eventoBean.evento.local.cep}" required="true"
							mask="99999-999" requiredMessage="Informe o CEP.">
							<p:ajax event="blur" listener="#{eventoBean.handleCepChange}"
								update="mapaGoogle,numeroCreateInput,enderecoCreateInput,bairroCreateInput,cidadeCreateInput,telefone1CreateInput,telefone2CreateInput" />
						</p:inputMask>
						<p:tooltip for="cepCreateInput"
							value="Informe o CEP, se for um CEP valido o endereço será preenchido."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="cepCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('ENDERECO')}"
							value="" />
						<h:outputText id="enderecoCreateOutput"
							value="#{messages.evento_cadastro_endereco}" />
						<p:inputText id="enderecoCreateInput"
							label="#{messages.evento_cadastro_endereco_label}"
							value="#{eventoBean.evento.local.endereco}" required="true"
							size="50" maxlength="250"
							requiredMessage="Informe o Endereço do evento!" />
						<p:tooltip for="enderecoCreateInput"
							value="Endereço do local do evento."
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="enderecoCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('NUMERO')}"
							value="" />
						<h:outputText id="numeroCreateOutput"
							value="#{messages.evento_cadastro_numero}" />
						<p:inputText id="numeroCreateInput"
							label="#{messages.evento_cadastro_numero_label}"
							value="#{eventoBean.evento.local.numero}" required="true"
							requiredMessage="Informe o número!">
							<p:ajax event="blur" listener="#{eventoBean.handleGoogleMap}"
								update="mapaGoogle" />
						</p:inputText>
						<p:tooltip for="numeroCreateInput" value="Número"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="numeroCreateInput" />


						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('BAIRRO')}"
							value="" />
						<h:outputText id="bairroCreateOutput"
							value="#{messages.evento_cadastro_bairro}" />
						<p:inputText id="bairroCreateInput"
							label="#{messages.evento_cadastro_bairro_label}"
							value="#{eventoBean.evento.local.bairro}" size="40"
							maxlength="50" />
						<p:tooltip for="bairroCreateInput" value="Bairro"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="bairroCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('CIDADE')}"
							value="" />
						<h:outputText id="cidadeCreateOutput" value="Cidade: *" />
						<p:inputText id="cidadeCreateInput" size="40" maxlength="75"
							value="#{eventoBean.evento.local.cidade}" required="true"
							requiredMessage="Informe o nome da cidade!">
						</p:inputText>
						<p:tooltip for="cidadeCreateInput" value="Cidade"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="cidadeCreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('TELEFONE1')}"
							value="" />
						<h:outputText id="telefone1CreateOutput" value="Telefone 2:" />
						<p:inputMask id="telefone1CreateInput"
							value="#{eventoBean.evento.local.telefone1}"
							mask="([telefone removido]?9" />
						<p:tooltip for="telefone1CreateInput" value="Número de telefone"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="telefone1CreateInput" />

						<h:outputText
							rendered="#{eventoNotificacaoBean.isNotificado('TELEFONE2')}"
							value="" />
						<h:outputText id="telefone2CreateOutput" value="Telefone 2:" />
						<p:inputMask id="telefone2CreateInput"
							value="#{eventoBean.evento.local.telefone2}"
							mask="([telefone removido]?9" />
						<p:tooltip for="telefone2CreateInput"
							value="Segundo número de telefone"
							rendered="#{eventoBean.usuario.ajuda}" />
						<p:message for="telefone2CreateInput" />

					</p:panelGrid>
				</p:panel>
			</p:tab>

continua.

O problema é que ao avançar para a proxima aba( aba local ) e retorna ( para aba geral ) em seguida avançar para a aba local. Sem setar o autocomplete, aparece nele o nome null.

6 Respostas

Hebert_Coelho

Qual o escopo do seu ManagedBean?

E

@SessionScoped

Hebert_Coelho

O #{eventoBean.evento} está sendo inicializado antes de ser acessado?

E

sim, está.

public String displayCreateDialog() {
		evento = new Evento();
		return "cadastroEvento?face-redirect=true";
	}
Hebert_Coelho

Edivando Alves:
sim, está.

public String displayCreateDialog() { evento = new Evento(); return "cadastroEvento?face-redirect=true"; }

E você tem certeza que está ao entrar na tela? Ou que esse método não está sendo chamado mais vezes o que poderia causar o objeto do autocomplete estar null?

E

Esse problema só acontece no cadastro de um novo evento, na segunda etapa do wizard onde tem um autocomplete de local.

Quando passo para a segunda etapa, volto para a primeira e avanço para a seguida novamente. O autocomplete aparece “null”.

Já tentei setar algum valor default nesse componente, para não aparecer null, mas não consegui.

Criado 16 de janeiro de 2013
Ultima resposta 16 de jan. de 2013
Respostas 6
Participantes 2