Domanda

Qui è una cosa così semplice

<p:commandLink value="Tom" onclick="document.getElementById('tom').focus()"/><br/>
<input id="tom"/>

Quando u clic sul Tom, l'attenzione testo get. Grande, ora provate questo

<p:commandLink value="Tom" onclick="document.getElementById('tom').focus()"/><br/>
<h:inputText id="tom"/> <br/>

quando clicco accadere nulla, verifico Firebug, vedo

document.getElementById("tom") is null

Quando provo ad utilizzare jQuery $('#tom').focus(), niente accade, nessun errore, ma non ha ottenuto attenzione sia. Questo è il response (non so se questa è la risposta data dal server) quando vedo da Firebug

<?xml version="1.0" encoding="utf-8"?>
<partial-response>
    <changes>
       <update id="javax.faces.ViewState"><![CDATA[455334589763307998:-2971181471269134244]]></update>
    </changes>
    <extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension>
</partial-response>

È stato utile?

Soluzione

Nel JSF, l'ID di elementi hanno come prefisso l'ID della forma che li contiene (più in generale, il loro ID come prefisso l'ID di tutti i componenti genitore che implementa il NamingContainer interfaccia). Ad esempio:

<h:form id="myForm">
    <h:inputText id="tom" .../>

genererà il seguente codice HTML:

<input id="myForm:tom" ...>
:

Per accedere al <input> è necessario utilizzare l'ID myForm:tom e non l'ID tom stesso.

Con jQuery, si dovrà utilizzare $("myForm\:tom").focus();

Altri suggerimenti

JSF sarà anteporre ID dispone di UINamingContainer bambini (h:form, h:dataTable , ecc) con l'ID del componente UINamingContainer stesso. È possibile disattivare questa impostando l'attributo prependId a false.

<h:form prependId="false">

Hai solo non sarà più in grado di comprendere in modo dinamico lo stesso pezzo di codice da qualche altra parte nella stessa vista. Tenetelo a mente quando disabilitare questa.

e con Primefaces2, u dovrebbe utilizzare jQuery invece di $, in questo modo:

 <h:commandButton id="dome" value="提交" action="#{uInfo.doMe}">
  <f:ajax execute="@form" render="@form"/>
 </h:commandButton>
 ...
 <script type="text/javascript">
 function refresh() {
  jQuery("input#dome").click();
 }
 var t=setInterval('refresh()', 5000);
 </script>

È necessario dare quel tag JSF un attributo id, in questo modo:

<h:inputText id="tom" />

In caso contrario non sarà rendering con un id, e quindi non ci sarà alcun elemento id="tom" da trovare.

Non dimenticate che primefaces permetterà anche di utilizzare il widgetvar attributo per legare il componente a un oggetto JavaScript.

Così, per esempio:

<p:inputText widgetvar="tom" id="tom" />

poi nel codice javascript o di un javascript richiamata si potrebbe fare:

tom.disable()

ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top