Como usar evento onblur , executar uma action JSF e voltar ao campo com Focus

29/10/2009

0


 Galera,

 To fritando para fazer uma tela que tem um input Text   e digitar um valor neste campo.

 ao sair no evento onblur  chamar uma action que imprime um relatorio direto para impressora e retornar ao mesmo campo para repetir a rotina com outro numero de pesquisa.

 Tentei dessa forma:

 <h:outputText  styleClass="rich-label" value="Entre com os dados:" />
                        <h:inputText  label="Dados" size="15" name="meuInput"  id="meuinput"  required="true" value="#{etiquetasController.num_notafiscal}"
                         event="onblur" onblur="submit()"  >
                             <a4j:support event="onkeyup" action="#{etiquetasController.executarEtiqueta}" immediate="true" requestDelay="3000"  focus="meuinput" reRender="etiquetas,etiqueta"  ajaxSingle="true"  />
                        
                            <f:validateLength minimum="6" maximum="15" />

                        </h:inputText>
 Ele volta para o campo mas nao executa o relatorio e da um erro porque acredito que deva ter que fazer um submit, mas se dou um submit()  ai que nao volta para o campo.

To usando  para o submit se atraves do ajax mas mesmo assim perde o foco. so funciona sem submit.

e o relatorio nada , nao imprimi  so se eu colocar um link <a4j:commandLink value="imprimir"  action="#{etiquetasController.executarEtiqueta}" focus="meuinput" />
 mas será utilizado um leito de codigo de barra uma pistola magnetica, ela nao vai clicar nesse link.
 
 Não é possivel que não exista algo parecido para web JSF.
 
 da uma força ai por favor, ja tem uma semana que estou nisso.

obrigado

Victor




Victor Lima

Victor Lima

Responder

Posts

30/10/2009

Victor Lima


 Bom dia.


 Consegui fazer imprimir após sair do campo e depois de dar submit. Ao pressionar TAB p campo perde o foco e envia o relatório direto para impressora. Veja como fiz.

 <h:outputText  styleClass="rich-label" value="Entre com os dados:" />
 <h:inputText  label="Dados" size="15" name="meuInput"  id="meuinput"  required="true" value="#{etiquetasController.num_notafiscal}" onblur="submit()"   reRender="etiquetas" >
<a4j:support event="onchange"  action="#{etiquetasController.executarEtiqueta}" immediate="true"  focus="meuinput" reRender="etiquetas,etiqueta"  ajaxSingle="true"  />
<f:validateLength minimum="6" maximum="15" />
</h:inputText>

Tudo isso esta dentro de um form assim:

<a4j:form ajaxSubmit="true" id="etiqueta"  reRender="etiquetas">

// codigo acima

</a4j:form>

Repare que no event onchange e chama a action action="#{etiquetasController.executarEtiqueta}", coloquei para dar focus="meuinput", mas isso não funciona, só funciona se eu tirar do inputTex a linha onblur="submit()"  mas se tiro essa linha não chama a action e não imprime o relatório.

O Relatório só vai ser executado se eu submeter a página.

O focus retornará para o campo se eu não submeter a página.

Eu preciso que os dois entrem em acordo e passe a funcionar , faz o submit m imprime o relatório e retorna ao campo.

Se alguem poder me ajudar , ficarei grato.

Victor

 

Responder

30/10/2009

Andrei Hirata

Entao cara..ao invez de usar ACTIOn use action listener..

E na sua função do relatório USE uma função do tipo action..isto vai resolver seu problema.abraços
Responder

30/10/2009

Victor Lima

Bom dia,

 Ja tentei,  não deu.

 Na verdade o relatório ta imprimindo normal, eu quero agora apos o submit que esta sendo dado voltar ao campo com um focus.

obrigado

Victor
Responder

30/10/2009

Andrei Hirata

Bom.minha ultima solução.Vc terá que criar uma função dentro de uma classe para focalizar seu EDIT.

Após a chamada da função de impressao relatorio, chame outra função de qualquer ,sendo que nela é que vai estar sua função para focalizar.

Não coloquei exemplo.se não entender oq estou dizendo eu passo um exemplo para vc
Responder

30/10/2009

Victor Lima



 Desculpe mas não entendi.

obrigado

Victor
Responder

30/10/2009

Andrei Hirata

Ou....Tenta forçar o focus.Escrevendo 2 vezes.. Após o comando de imprimir etiqueta no seu jsf
faca outro comando apenas com comando ajax usando a funcao FOCUS

Ou seja.explicando

NA PRIMEIRA VC DA UM SUBMITE NORMAL SEM SER AJAX
E na segunda vc executa usando ajax SEM FUNCAO relatorio..

Fiz um teste baba aqui e funciono.

Ele executa a funcao de teste
e depois é focalizado NA MARRA>kakaka
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar