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:" />
                       
                         event="onblur"  >
                            
                        
                           

                       


 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  
 
 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

Dyego Carmo

Olá

Nao entendi a sua duvida

Poderia exclarecer ela melhor ?

Responder

30/10/2009

Victor Lima



 Boa Tarde,



 Eu tenho uma tela que contem um componente inputText, eu preciso que quando esse campo perder foco chama uma action, que no meu caso imprime uma etiqueta direto para impressora. Após imprimir o campo inputText deve receber novamente o Foco para emitir uma outra etiqueta, e assim sucessivamente.

 Como venho tentando, consegui fazer com que imprimisse direto mas o componente inputText não recebe o focu, isso porque o formulario foi submetido, caso eu tire a linha do codigo que faz com que submeta o formulário o focu voltará ao campo, mas tambem a etiqueta não é impressa.

 Não sei se voce ja viu no Delphi, um campo editText que no evento OnExit faz alguma coisa e depois dessa função voce manda dar o EditiText.SetFocus.

Seria assim:

Veja o que fiz até agora onde só esta imprimindo.

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:c="http://java.sun.com/jstl/core"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich">


    <script type="text/javascript">
                function setFocus()
                {
                    document.getElementById("etiqueta:meuinput").focus();
                }
    </script>

    <body onload="setFocus();">
        <ui:composition template="../layouts/template.xhtml">
            <ui:define name="content">
                <rich:panel style="width:800px;height:300px">
                    <f:facet name="header">
                        <h:outputText value="Impressão de Etiquetas"/>
                    </f:facet>
                    <a4j:form ajaxSubmit="true" id="etiqueta"  reRender="etiquetas">
                        <h:panelGrid columns="3">
                            <h:outputText  styleClass="rich-label" value="Tipo de Etiqueta" />
                            <rich:comboBox  size="2" label="Tipo de Etiqueta" defaultLabel="Selecione a Etiqueta" id="tipoetiqueta" required="false" value="">
                                <f:selectItem itemValue="Endereçamento"/>
                                <f:selectItem itemValue="Simples"/>
                                <f:validateLength minimum="4" maximum="30" />
                            </rich:comboBox>
                            <h:selectOneRadio styleClass="rich-label">
                                <f:selectItem itemLabel="Numero de Nota Fiscal" itemValue="nota"/>
                                <f:selectItem itemLabel="Numero do Pedido" itemValue="pedido"/>
                                <a4j:support event="onclick" reRender="tipo"/>
                            </h:selectOneRadio>
                        </h:panelGrid>
                        <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()"  onsubmit="javascript:setFocus();" 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>
                        <c:if test="${not empty etiquetasController.num_notafiscal}">
                            <br />
                            <rich:dataTable  id="etiquetas" rendered="true"  var="item" value="#{etiquetasController.etiquetas}" style="width:400px">
                               <rich:column id="numped">
                                    <f:facet name="header"><h:outputText styleClass="headerText" value="Fornecimento" /></f:facet>
                                    <h:outputText value="#{item[0]}"  />
                                </rich:column>
                                <rich:column id="nota">
                                    <f:facet name="header"><h:outputText styleClass="headerText" value="Nota Fiscal" /></f:facet>
                                    <h:outputText value="#{item[9]}"  />
                                </rich:column>
                                <rich:column id="datanota">
                                    <f:facet name="header"><h:outputText styleClass="headerText" value="Data Nota" /></f:facet>
                                    <h:outputText value="#{item[10]}">
                                        <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
                                    </h:outputText>
                                </rich:column>
                                <rich:column id="nome">
                                    <f:facet name="header"><h:outputText styleClass="headerText" value="Nome Cliente" /></f:facet>
                                    <h:outputText value="#{item[3]}"/>
                                </rich:column>
                            </rich:dataTable>
                        </c:if>
                    </a4j:form>
                </rich:panel>
            </ui:define>
        </ui:composition>
    </body>
</html>
Responder

04/11/2009

Dyego Carmo

Voce pode fazer um script em JavaScript que ao carregar a pagina novamente detectar que algum componente do tipo "hidden" possui um valor e aplicar o

document.getElementById("meuComponente").focus();

Responder

09/11/2009

Victor Lima

favor fechar chamado

atenciosamente

Victor
Responder

09/11/2009

Fernando Silva

olá usé o <a4j:support> dentro do seu input para efetuar este procedimento!!

mais ou menos assim:

<h:inputText id="aplicInicial" value="#{fundo.aplicDesejada}">
       <a4j:support id="supAplicacao" action="#{ManterSimulacao.limpaValores}" event="onblur"/>
</h:inputText>
                     



Responder

09/11/2009

Fernando Silva

Desculpa, faltou o focus !!

mais ou menos assim:

<h:inputText id="aplicInicial" value="#{fundo.aplicDesejada}">
       <a4j:support id="supAplicacao" action="#{ManterSimulacao.limpaValores}" event="onblur" focus="aplicInicial"/>
</h:inputText>
                     



Responder

22/02/2010

Alexsandro Costa

Tem que ter a biblioteca JS de JQUERY, que esta abaixo, pode ser outra versão!

<script src="<%= request.getContextPath() %>/js/jquery-1.3.2.js" type="text/javascript">


<script type="text/javascript">
    jQuery.noConflict();

    function setaFocusOnBlur(){
        jQuery("#frm_principal\\:inputTeste").focus();
    }

    jQuery(document).ready(function(){
        //esse comando vai setar o focus no onload da tela para o primeiro input:text da tela!
        jQuery("input:text:visible:first").focus();
    }
</script>
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