Hallo allerseits.
Ich habe in einem Projekt PrimeFaces (3.4.2) im Einsatz, aber das Problem, das ich habe, ist vermutlich JSL-Problem (oder auch nicht ...).
Ich habe eine Seite, die für die Eingabe von Daten verwendet wird. Von 36 Inut-Felder sind ca. 20 'required'. Die Verteilung von Eingeabe-Felder habe ich mit TabView und AccordionPanel-Komponenten realisiert: sieht an sich gut aus und funktioniert auch. Was ist dann das Problem?
Wenn aus die Schaltfläche "Speichern" (commandButton) gelickt wird, wobe nich alle Inputs 'valid' sind, werden alle Felder mit 'invalid' Inhalten entsprechend markiert und anschliessend die Tab-Componente (aus TabView) geöffnet, in der die erste Komponente enthalten ist, die einen 'invalid' Inhalt hat. Wenn ich jetzt in diesem Tab alle 'invalid' Inhalte korrigiere und anschliessend auf 'Speichern' klicke, würde ich erwarten, dass danach automatisch das Tab geöffnet wird, in dem die nächste Komponente mit einem 'invalid' Inhalt enthalten ist. Leider passiert dies nicht:
Kurz gesagt: ich muss die Schaltfläche 'Speichern' zweimal anklicken, was ich unschön finde. Wie könnte man dies beheben?
Der Code für 'commandButton' sieht wie folgt aus:
[XML]
<p:commandButton value="#{msg.lbl_btn_save}"
title="#{msg.btn_data_speichern_tooltip}"
actionListener="#{dataManagedBean.save(dataBean)}"
update=":frm_add_data"
oncomplete="if (args.validationFailed){tabs.select(#{dataManagedBean.activeIndex})}" />
[/XML]
Der Wert für 'activeIndex' wird in der Methode 'getActiveIndex' so manipuliert, dass er den Indexwert des nächsten 'invalid'-Tabs bekommt, falls weitere 'invalid'-Komponenten existieren sollten. ActiveIndex wird korrekt bestimmt (durch Logging kontrolliert), leider fehlt das "Umschalten" auf das nächste 'invalid'-Tab.
Wenn ich keine Tabs hätte, wäre dies an sich kein Problem, da alle Felder sofort sichtbar. Mit Tabs muss ich die Schaltfläche 'Speichern' einmal mehr anklicken, um die Anzeige des nächsten 'invalid' Tabs zu realisieren.
Vielen Dank für jeden Tipp.
Ich habe in einem Projekt PrimeFaces (3.4.2) im Einsatz, aber das Problem, das ich habe, ist vermutlich JSL-Problem (oder auch nicht ...).
Ich habe eine Seite, die für die Eingabe von Daten verwendet wird. Von 36 Inut-Felder sind ca. 20 'required'. Die Verteilung von Eingeabe-Felder habe ich mit TabView und AccordionPanel-Komponenten realisiert: sieht an sich gut aus und funktioniert auch. Was ist dann das Problem?
Wenn aus die Schaltfläche "Speichern" (commandButton) gelickt wird, wobe nich alle Inputs 'valid' sind, werden alle Felder mit 'invalid' Inhalten entsprechend markiert und anschliessend die Tab-Componente (aus TabView) geöffnet, in der die erste Komponente enthalten ist, die einen 'invalid' Inhalt hat. Wenn ich jetzt in diesem Tab alle 'invalid' Inhalte korrigiere und anschliessend auf 'Speichern' klicke, würde ich erwarten, dass danach automatisch das Tab geöffnet wird, in dem die nächste Komponente mit einem 'invalid' Inhalt enthalten ist. Leider passiert dies nicht:
- nach dem Klick auf 'Speichern' werden die zuvor korrigierten Input-Felder Inhalte validiert, die Anzeige bleibt auf dem gleichen Tab, die Markierung wird aufgehoben (da Inhalte nicht mehr 'invalid').
- nach dem zweiten Klick auf 'Speichern' wird das Tab angezeigt, in dem die nächste 'invalid'-Komponente enthalten ist.
Kurz gesagt: ich muss die Schaltfläche 'Speichern' zweimal anklicken, was ich unschön finde. Wie könnte man dies beheben?
Der Code für 'commandButton' sieht wie folgt aus:
[XML]
<p:commandButton value="#{msg.lbl_btn_save}"
title="#{msg.btn_data_speichern_tooltip}"
actionListener="#{dataManagedBean.save(dataBean)}"
update=":frm_add_data"
oncomplete="if (args.validationFailed){tabs.select(#{dataManagedBean.activeIndex})}" />
[/XML]
Der Wert für 'activeIndex' wird in der Methode 'getActiveIndex' so manipuliert, dass er den Indexwert des nächsten 'invalid'-Tabs bekommt, falls weitere 'invalid'-Komponenten existieren sollten. ActiveIndex wird korrekt bestimmt (durch Logging kontrolliert), leider fehlt das "Umschalten" auf das nächste 'invalid'-Tab.
Wenn ich keine Tabs hätte, wäre dies an sich kein Problem, da alle Felder sofort sichtbar. Mit Tabs muss ich die Schaltfläche 'Speichern' einmal mehr anklicken, um die Anzeige des nächsten 'invalid' Tabs zu realisieren.
Vielen Dank für jeden Tipp.
Zuletzt bearbeitet: