Array
(
)

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

Victor Lima
   - 29 out 2009


 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




Dyego Carmo
   - 30 out 2009

Olá

Nao entendi a sua duvida

Poderia exclarecer ela melhor ?

0
|
0

Victor Lima
   - 30 out 2009



 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>

0
|
0

Dyego Carmo
   - 04 nov 2009

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();

0
|
0

Victor Lima
   - 09 nov 2009

favor fechar chamado

atenciosamente

Victor

0
|
0

Fernando
|
MVP
Pontos: 1200
    09 nov 2009

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>
                     



0
|
0

Fernando
|
MVP
Pontos: 1200
    09 nov 2009

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>
                     



0
|
0

Alexsandro Costa
   - 22 fev 2010

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>

0
|
0