JSF 2.0 - Dúvida atualizar inputText via ajax

Prezados,

Tenho o seguinte código:

<h:form>  
<h:panelGrid columns="2">  
<p:autoComplete value="#{jogadorController.jogadorSelecionado}" completeMethod="#{jogadorController.completaNome}" var="jogador" itemLabel="#{jogador.nome}"  
itemValue="#{jogador}" converter="jogadorConverter"/>  
<p:commandButton value="Submit" update="jogador mensagens" image="ui-icon-transfer-e-w"/>  
<h:outputText id="jogador" value="Selecionado: #{jogadorController.jogadorSelecionado.nome}" />  
</h:panelGrid>  
</h:form>  

Quando escolha uma das sugestões do autocomplete e clico no botão, o componente jogador é atualizado corretamente. Porém se eu “troco” o componente h:outputText por um p:inputText, a atualização ajax não funciona.

Ou seja, torca esta linha:

<h:outputText id="jogador" value="Selecionado: #{jogadorController.jogadorSelecionado.nome}" /> 

Por esta:

<p:inputText id="jogador" value="Selecionado: #{jogadorController.jogadorSelecionado.nome}" /> 

Perceberam que os dois componentes possuem o mesmo value?

Obrigado

Vou responder o mesmo que no post original: http://www.guj.com.br/java/266418-jsf-20---duvida-atualizar-input

[quote]Pq vc precisa dessa alteração?

p:inputValue você precisa apontar para algum MB que irá segurar esse valor.[/quote]

Você precisa entender que inputValue é um objeto utilizado para enviar dados para seu programa não apenas exibir.

Ao fazer value=“Selecionado: #{jogadorController.jogadorSelecionado.nome}” em um inputText, oq seria a palavra "Selecionado: " para o JSF?
Entenda que outputText é para chapar texto, inputText é para enviar texto para seu MB.

Lembre que um inputText precisar ter um value válido e value=“Selecionado: #{jogadorController.jogadorSelecionado.nome}” não é um valor válido.

Simplesmente não acontece nada, ou tem 1 stack trace de erro?

[quote=jakefrog]Vou responder o mesmo que no post original: http://www.guj.com.br/java/266418-jsf-20---duvida-atualizar-input

[quote]Pq vc precisa dessa alteração?

p:inputValue você precisa apontar para algum MB que irá segurar esse valor.[/quote]

Você precisa entender que inputValue é um objeto utilizado para enviar dados para seu programa não apenas exibir.

Ao fazer value=“Selecionado: #{jogadorController.jogadorSelecionado.nome}” em um inputText, oq seria a palavra "Selecionado: " para o JSF?
Entenda que outputText é para chapar texto, inputText é para enviar texto para seu MB.

Lembre que um inputText precisar ter um value válido e value=“Selecionado: #{jogadorController.jogadorSelecionado.nome}” não é um valor válido.[/quote]

Saquei… O “Selecionado” no input foi vascilo… Vlw :wink:

Olá Fábio,

  • OBS.: ontem, quando postei o post original estava com meu note, e hj não estou, por isso estou postando outro código, mas mesma situação, ok?
&lt;p:autoComplete id="fiscal_envolvido"
						value="#{fiscalEnvolvidoBean.fiscalSelecionado}"
						completeMethod="#{fiscalEnvolvidoBean.completaNomeFiscal}"
						minQueryLength="2" queryDelay="600" forceSelection="true"
						var="fiscal" itemLabel="#{fiscal.pessoaFisica.pessoa.nome}"
						itemValue="#{fiscal}" size="72"
						title="#{msg.aie_tooltiptext_autocomplete_fiscal}"
						converter="fiscalConverter" /&gt;
					&lt;p:commandButton value="Editar" update="nome_fiscal_aba_efetivo" image="ui-icon-transfer-e-w"/&gt;		
					&lt;!-- &lt;h:outputText id="nome_fiscal_aba_efetivo" value="Selecionado: #{fiscalEnvolvidoBean.fiscalSelecionado.pessoaFisica.pessoa.nome}" /&gt; --&gt;
					
					&lt;p:inputText id="nome_fiscal_aba_efetivo" value="#{fiscalEnvolvidoBean.fiscalSelecionado.pessoaFisica.pessoa.nome}" readOnly="true" style="width: 220px;" /&gt;						

A linha <p:inputText id=“nome_fiscal_aba_efetivo” value="#{fiscalEnvolvidoBean.fiscalSelecionado.pessoaFisica.pessoa.nome}" readOnly=“true” style=“width: 220px;” /> gera a exceção abaixo, mas quando deixo apenas a <h:outputText id=“nome_fiscal_aba_efetivo” value=“Selecionado: #{fiscalEnvolvidoBean.fiscalSelecionado.pessoaFisica.pessoa.nome}” /> funciona.

29/02/2012 09:12:02 com.sun.faces.lifecycle.ProcessValidationsPhase execute
AVISO: /restrito/fiscal_envolvido.xhtml @32,162 value="#{fiscalEnvolvidoBean.fiscalSelecionado.pessoaFisica.pessoa.nome}": Target Unreachable, 'pessoaFisica' returned null
javax.el.PropertyNotFoundException: /restrito/fiscal_envolvido.xhtml @32,162 value="#{fiscalEnvolvidoBean.fiscalSelecionado.pessoaFisica.pessoa.nome}": Target Unreachable, 'pessoaFisica' returned null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:97)
	at org.primefaces.renderkit.InputRenderer.getConverter(InputRenderer.java:154)
	at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:167)

no get do fiscalSelecionado deve estar retornando null. Se não for ele, verifique se o pessoaFisica ou qualquer outro get que você está chamando se não está retornando null.

No caso do fiscalSelecionado você poderia fazer:

if(fiscalSelecionado == null){ fiscalSelecionado = new FiscalSelecionado(); }

ao remover o Selecionado: do value como foi dito pelo jakefrog não resolveu?

abraço

[quote=fabiozanardi]ao remover o Selecionado: do value como foi dito pelo jakefrog não resolveu?

abraço[/quote]

Retirei e deu a exception acima.

O que eu não entendo é o porque com o outputText ele consegue obter os dados do fiscal selecionado no autoComplete, e com o inputText ocorre NPE ao obter a mesma propriedade.

[quote=blastec][quote=fabiozanardi]ao remover o Selecionado: do value como foi dito pelo jakefrog não resolveu?

abraço[/quote]

Retirei e deu a exception acima.

O que eu não entendo é o porque com o outputText ele consegue obter os dados do fiscal selecionado no autoComplete, e com o inputText ocorre NPE ao obter a mesma propriedade.[/quote]
Você viu oq eu coloquei ali em cima? -_-’’

[quote=jakefrog]Vou responder o mesmo que no post original: http://www.guj.com.br/java/266418-jsf-20---duvida-atualizar-input

[quote]Pq vc precisa dessa alteração?

p:inputValue você precisa apontar para algum MB que irá segurar esse valor.[/quote]

Você precisa entender que inputValue é um objeto utilizado para enviar dados para seu programa não apenas exibir.

Ao fazer value=“Selecionado: #{jogadorController.jogadorSelecionado.nome}” em um inputText, oq seria a palavra "Selecionado: " para o JSF?
Entenda que outputText é para chapar texto, inputText é para enviar texto para seu MB.

Lembre que um inputText precisar ter um value válido e value=“Selecionado: #{jogadorController.jogadorSelecionado.nome}” não é um valor válido.[/quote]

Olá jakefrog. Sim, eu vi (rsrsrsrs). Lendo o q vc falou, ao meu entender, a única forma de eu mostrar dados num inpuText, seria se no método getFiscalSelecionado, eu pesquisasse no banco o fiscal selecionado? Me parece esquisito, uma vez que eu já tenho o objeto selecionado no autocomplete, tanto que o outputText conseguiu renderizá-lo… Tudo isso porque um campo é para exibição e outro para entrada de dados?

Me esclarece um pouco melhor essa questão fazendo favor :wink: