Pressionar enter no input com commandlink não envia o formulário

11 respostas
jsfjava
Alexsandro_Andrade

Eu tenho um formulário que contém um inputtext e um commandlink que envia o formulário quando clicado. Tenho notado que, se eu pressionar a tecla Enter depois de inserir o texto no texto de entrada, a página apenas será atualizada. Se eu alterar o commandLink para um commandButton, o formulário será enviado, mas tenho algumas razões para usar o commandLink, portanto, isso não é viável.

11 Respostas

Alexsandro_Andrade
<div class="form-row">
							<div class="form-group col-md-6">
								<label>Código</label>
								<h:inputText value="#{contagemMateriaPrimaBean.codigoBipagem}"
									styleClass="form-control"
									pt:placeholder="Código 2D da etiqueta fixada no produto"
									required="true" />
							</div>
							<div class="form-group col-md">
								<h:commandLink style="margin-top:32px"
									styleClass="btn btn-primary"
									onkeyup="if((event.keyCode==13)||(window.event.keyCode==13)){document.getElementById('searchUserBut').click();}">
									<i class="fa fa-search" aria-hidden="true" />
									<f:ajax event="click" execute="@form" render="@form"
										listener="#{contagemMateriaPrimaBean.conferencia}" /> Pesquisar
                    			 </h:commandLink>
							</div>
						</div>
Mike

Ola @Alexsandro_Andrade

Usa a tag defaultCommand e no target coloca o id do commandLink.
Ela executa um componente command quando o enter for pressionado, no seu caso o commandLink

<h:commandLink id="meuCommandLink" ... />

<p:defaultCommand target="meuCommandLink" />
Alexsandro_Andrade

Oi mike! dessa forma?

<h:commandLink id=“meuCommandLink” style=“margin-top:32px"

styleClass=“btn btn-primary”>

<i>

<f:ajax event=“click” execute=”<a class="mention" href="/u/form">@form</a>" render="<a class="mention" href="/u/form">@form</a>"

listener="#{contagemMateriaPrimaBean.conferencia}" />  Pesquisar

</h:commandLink>

<p:defaultCommand target=“meuCommandLink” /></i>
Mike

Deu certo ai?

O defaultCommand esta certo, mas eu acho que esse ajax ai não vai executar, pois o evento é de click, bom… não sei…
Se não funcionou, eu removeria o atributo event

Alexsandro_Andrade

nao jsf nao ta reconhecendo o p:defaultCommand de onde vc esta puxando ele? aqui eu uso assim.

xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
Mike

Ele é do primeFaces

Alexsandro_Andrade

eu nao to usando prime rs é por isso entao, existe outra forma?

Eduardo_Maranata10

Tem que estar dentro de um <h:form>

Alexsandro_Andrade

ja esta, só não foi exibido ai no nesse trecho do código

Mike

Eu suspeitei, eu lembro de você ter falado um tempo atrás mesmo, mas né…

Você pode executar um método JS ao pressionar enter e então faze-lo da um click no commandLink

Algo desse tipo:

<h:inputText
... onkeypress="submitByEnter(event)">
</h:inputText>

function submitByEnter(e){
    if (e.keyCode == 13) {
        e.preventDefault();
        document.getElementById("form:meuCommandLink").click();
    } 
}
Alexsandro_Andrade

valeu mike! vou dar uma conferida

Criado 28 de agosto de 2018
Ultima resposta 28 de ago. de 2018
Respostas 11
Participantes 3