2009-10-09 21 views
7

Ich muss den Eingabefokus beim Laden der Seite auf eine bestimmte Eingabetextkomponente richten (um die Eingabe eines Werts mit einem Barcode-Scanner zu ermöglichen).Fokus auf einen JSF-Eingangstext setzen

In einfachen HTML würde ich einen JavaScript "onload" -Handler zum Body-Tag hinzufügen, aber es muss einen besseren Weg in JSF geben.

Was ist der „saubersten“ Weg, dies zu erreichen:

  1. „statisch“ Fälle, in denen die gleiche Steuerung jede Seite zu laden den Fokus erhält.
  2. "dynamische" Fälle, in denen dies eine andere Kontrolle für jede Seitenladung sein könnte.

Antwort

7

Interessante Frage.

In JSF gibt es dafür nichts. Sie wissen bereits, wie man das in einfachem HTML/Javascript macht und es gibt nichts anderes, das JSF zu diesem anderen als verrückte IDs hinzufügt.

Also für "statischen" Zugriff müssen Sie nur sicherstellen, dass Sie die vollständige JSF ID z. "myform: mydiv: meininput". Dies ist jedoch nicht sehr sauber, so als würde sich Ihre Seite ändern, ist es wahrscheinlich, dass sich diese ID auch ändert.

Idealerweise haben Sie eine JSF-Komponente, die Sie in Ihre <h:inputText> einbetten würden, die anzeigen würde, dass der Fokus erforderlich war. Zum Beispiel:

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

Technisch wäre es keine harte Lösung. Die Komponente würde nur ihre ID finden und dann etwas Javascript hinzufügen, das focus() darauf aufruft.

Seam hat etwas ähnliches mit seiner <s:defaultAction/> Komponente, die eine Verknüpfung oder Schaltfläche reagiert auf die Eingabetaste. Vielleicht möchten Sie den Quellcode davon überprüfen.

+0

Ich mag Ihre dynamische Lösung. Es hat einige Einschränkungen, wenn sich das Steuerelement zum Fokussieren überall bewegt, aber es reicht in meiner Situation aus. Vielen Dank! – Timo

+0

JSF IDs sind nicht verrückt, wenn Sie Ihre eigenen zuweisen. :-) Lass es nicht alleine machen! Als eine Randnotiz scheinen Apple iDevices Versuche zu ignorieren, den Fokus für die Eingabe während des Ladens von Fenstern aus Javascript zu setzen. Sinnvoll im Zusammenhang mit generischem Web-Browsing, aber sehr irritierend beim Versuch, benutzerdefinierte Web-Apps zu erstellen (insbesondere solche, die Barcode-Scanner zur Eingabe verwenden). –

Verwandte Themen