Wie konzentrieren Sie sich auf eine Komponente mit Apache Wicket? Die Suche führt zu sehr wenig Information, hauptsächlich zum Setzen des Standardfeldes. Ich möchte kein Standardfeld festlegen, sondern den Fokus festlegen, wenn beispielsweise ein bestimmter Radio-Button ausgewählt ist.Setzen Sie den Fokus auf eine Komponente mit Apache Wicket?
Antwort
Sobald Sie Ihr Verhalten zum Festlegen des Fokus erstellen, sollten Sie in der Lage sein, es bei jedem Ereignis der Komponente hinzuzufügen, stellen Sie nur sicher, dass die Komponente Teil von AjaxRequestTarget ist. Ich sehe nicht, warum dies nicht funktionieren würde ...
myRadioButton.add(new AjaxEventBehavior("onchange") {
@Override
protected void onEvent(AjaxRequestTarget target) {
myOtherComponent.add(new DefaultFocusBehavior());
target.addComponent(myForm);
}
});
Hier ist ein Link, der zeigt, wie die Standardfokusverhalten erstellen, wenn Sie nicht bereits haben: http://javathoughts.capesugarbird.com/2009/01/wicket-and-default-focus-behavior.html
Wenn Sie nur wollen Javascript setFocus durch und wollen nicht ein Formular oder eine Komponente neu zu laden, können Sie den folgenden Code verwenden:
import org.apache.wicket.Component;
public class JavascriptUtils {
private JavascriptUtils() {
}
public static String getFocusScript(Component component) {
return "document.getElementById('" + component.getMarkupId() + "').focus();";
}
}
und dann in jeder Ajax-Methode können Sie verwenden:
target.appendJavascript(JavascriptUtils.getFocusScript(componentToFocus));
Gibt es eine Möglichkeit, das gleiche ohne JavaScript zu erreichen?
(ich bin der Umsetzung ein Formular mit einem Feedback-Panels, die nur kommt, wenn Javascript ausgeschaltet ist, so dass es nicht sinnvoll wäre, da auf JavaScript angewiesen ..., -)
ich nur finden konnte, Antworten, die JS verwenden. focs() ... vielleicht bietet Wicket 1.5 eine Methode Component.setFocus() ...
Es gibt keine Möglichkeit, den Fokus auf ein HTML-Element zu setzen, ohne JavaScript zu verwenden. HTML hat kein Tag oder Attribut, das dies (noch) ermöglichen würde. Wenn Wicket jemals eine Component.setFocus() -Methode implementiert, würde es trotzdem einige JavaScript generieren, um es zu aktivieren. – Marcelo
Sie können das einfache HTML-Attribut "Autofokus" verwenden. Sie können es direkt zum ersten Eingabe-Tag der HTML-Datei hinzufügen oder hinzufügen wie "component.add (new AttributeAppender (" autofocus "," "));" Überprüfe meine kurze Antwort. – BlondCode
Wenn Sie zufällig eine Ajax-Taste verwenden, können Sie einfach target.focusComponent(myComponent);
in der onSubmit
Methode der Schaltfläche aufrufen .
Ich empfehle die Verwendung der nativen org.apache.wicket.ajax.AjaxRequestTarget#focusComponent()
. Zum Beispiel:
/**
* Sets the focus in the browser to the given component. The markup id must be set. If
* the component is null the focus will not be set to any component.
*
* @param component
* The component to get the focus or null.
*/
org.apache.wicket.ajax.AjaxRequestTarget#focusComponent(Component component)
Hör zu, was Martin-G sagt ;-) – Jesse
Für ein Pop-up wie modalWindow meine Abhilfe Lösung war das Attribut „Autofokus“ auf dem ersten Eingangs-Tag zu verwenden. Eine einfache Lösung ist es, es direkt zum HTML hinzuzufügen.
<input ..... autofocus>
Eine andere Lösung ist es auf die modalWindow selbst hinzuzufügen:
@Override
public void show(AjaxRequestTarget target) {
super.show(target);
setUpFocus();
}
protected void setUpFocus() {
DeepChildFirstVisitor visitor = new DeepChildFirstVisitor() {
@Override
public void component(Component component, IVisit<Void> iVisit) {
if (isAutofocusable(component)) {
component.add(new AttributeAppender("autofocus", ""));
iVisit.stop();
}
}
@Override
public boolean preCheck(Component component) {
return false;
}
};
this.visitChildren(FormComponent.class, visitor);
}
protected boolean isAutofocusable(Component component) {
if (component instanceof TextArea ||
component instanceof DropDownChoice ||
// component instanceof RadioChoice ||
component instanceof AjaxCheckBox ||
component instanceof AjaxButton ||
component instanceof TextField) {
return true;
}
return false;
}
RadioChoice wird kommentiert, weil diese Lösung nicht auf, dass die Arbeit. Für RadioChoice würde ich empfehlen, ein FocusedRadioChoice zu implementieren:
public class FocusedRadioChoice<T> extends RadioChoice<T> {
//constructors...
@Override
protected IValueMap getAdditionalAttributes(int index, T choice) {
super.getAdditionalAttributes(0, choice);
AttributeMap am = new AttributeMap();
am.put("autofocus", "");
return am;
}
}
- 1. Apache Wicket vs Apache Klicken Sie auf
- 2. Setzen Sie den Fokus auf eine bestimmte DataGrid-Zelle
- 3. Fokus auf eine Schaltfläche setzen
- 4. JQuery-Thickbox mit Iframe. Setzen Sie den Fokus auf Eingabefeld
- 5. Setzen Sie den Fokus auf Textbox mit Javascript
- 6. Setzen Sie den Fokus auf Feld mit SSJS in Xpages?
- 7. Setzen Sie den Fokus auf ein Pop-up mit Musikwiedergabe
- 8. Den Fokus auf ein MsgBox-Objekt setzen
- 9. Konnte den Fokus auf ListView nicht setzen
- 10. Datagrid Setzen Sie den Fokus auf die neu hinzugefügte Zeile
- 11. Setzen Sie den Fokus auf PropertySheet Elementknoten in ControlsFX
- 12. versuchen, den Fokus auf eine versteckte Textbox zu setzen
- 13. EditText: Vermeiden Sie den Fokus auf setText()
- 14. Fokus auf ein Popup-Steuerelement textInput setzen
- 15. Setzen Sie die Komponente TemplateURL auf den konfigurierten Pfad.
- 16. Mit webdriver den Fokus auf einen neu geöffneten Browser setzen
- 17. GWT vs Apache Wicket
- 18. Fokus auf Iframe-Inhalt setzen
- 19. So bearbeiten Sie LoadableDetachableModel in Apache Wicket
- 20. Firefox kann den Fokus nicht auf den Textbereich setzen
- 21. Setzen Sie den Systemfokus auf meine Anwendung
- 22. Setzen Sie den Fokus auf eine Eingabe innerhalb eines Bootstrap TabContent auf der Registerkarte ändern
- 23. Angular2 - Wie benachrichtigt werden, dass eine Komponente den Fokus verliert
- 24. Auf Windows-Formularen, Registerkarte Fokus auf eine Schaltfläche setzen
- 25. Setzen Sie den Fokus in einer Android-Anwendung
- 26. Unterstützt Liferay 6.2 apache Wicket?
- 27. Eine Apache IP Whitelist setzen
- 28. WPF: Ich kann den Fokus nicht setzen
- 29. Wie implementiert man ACL mit Apache Wicket?
- 30. jquery, setzen Sie den Fokus auf die erste aktivierte Eingabe oder wählen Sie auf der Seite
Ich würde Ihnen vorschlagen, den Code in der Antwort (Beibehaltung des ursprünglichen Bezugs, natürlich) zu kopieren, so dass es nicht auf externe Ressourcen abhängt. – tetsuo
Problem mit dieser Lösung ist, dass, sobald Sie es jedes Mal wenn es angefügt wurde (AjaxRequestTarget # addComponent) es konzentriert (oder zumindest Fokus Javascript ist) mit AjaxRequestTarget # FocusComponent ist One-Shot-Fokus, so ist es besser geeignet für Verhalten in angefordert Frage ("Optionsfeld ist ausgewählt") –