2009-10-09 13 views
7

È necessario indirizzare lo stato attivo di input a un componente di inputtext specifico al momento del caricamento della pagina (per consentire l'immissione di un valore utilizzando uno scanner di codici a barre).Impostazione dello stato attivo su un testo di input JSF

In semplice HTML aggiungerei un gestore "onload" JavaScript al tag body, ma ci deve essere un modo migliore in JSF.

Qual è il modo "pulito" per raggiungere questo per:

  1. casi "statici" in cui lo stesso controllo viene attivato ogni caricamento della pagina.
  2. casi "dinamici" in cui questo potrebbe essere un controllo diverso per ogni caricamento di pagina.

risposta

7

Interessante domanda.

Non c'è nulla di pronto per fare questo in JSF. Sai già come farlo in semplice HTML/Javascript e non c'è nulla di diverso che JSF aggiunga a questo oltre ai suoi pazzi ID.

Quindi per l'accesso "statico" è sufficiente assicurarsi di specificare l'ID JSF completo es. "MyForm: mydiv: myInput". Questo non è molto pulito anche se la tua pagina cambia, è probabile che anche questo ID cambi.

Idealmente si dovrebbe avere un componente JSF che si annida all'interno del proprio <h:inputText> che indicherebbe che era necessaria l'attivazione. Ad esempio:

<h:inputText value="#{whatever}"> 
    <my:focusComponent /> 
</h:inputText> 

Tecnicamente, non sarebbe una soluzione difficile. Il componente dovrebbe solo trovare il suo ID e quindi aggiungere qualche javascript che chiama focus() su di esso.

Seam ha qualcosa di simile al suo componente <s:defaultAction/> che fa sì che un collegamento o un pulsante rispondano al tasto Invio. Potresti voler controllare il codice sorgente di quello.

+0

Mi piace la tua soluzione dinamica. Ha alcune limitazioni se il controllo per mettere a fuoco si sposta dappertutto, ma è sufficiente nella mia situazione. Grazie! – Timo

+0

Gli ID JSF non sono pazzi se si assegnano i propri. :-) Semplicemente non lasciare che si risolva da solo! Come nota a margine, Apple iDevices sembra ignorare i tentativi di impostare lo stato attivo per l'input durante il caricamento della finestra da javascript. Ha senso dal contesto della navigazione web generica, ma molto irritante quando si tenta di creare app Web personalizzate (specialmente quelle che utilizzano gli scanner di codici a barre per l'immissione). –

Problemi correlati