Autor Thema: Felder in einer XPages leeren sich  (Gelesen 4000 mal)

Offline MLoy

  • Junior Mitglied
  • **
  • Beiträge: 57
Felder in einer XPages leeren sich
« am: 26.11.15 - 10:48:03 »
Hallo,

ich hab hier ein merkwürdiges Problem.

In einer XPage gibt es mehrere bearbeitbare Testfelder (Beispiel siehe unten).

Kurze Erklärung:
  • Wenn im Feld Text verändert wird (onInput), soll sofort ein Kennzeichen (Icon) ausgeblendet werden
  • Wenn das Feld verlassen wird (onChange), soll in Abhängigkeit vom Inhalt die CSS-Klasse geändert werden (Darstellung Pflichtfelder)

Bitte jetzt nicht nach Sinnhaftigkeit o.ä. fragen. Der Kunde braucht das genau so.

Grundsätzlich funktioniert das Ganze sehr gut.
Allerdings kommt es vor, dass während der Eingabe das Feld (und auch alle anderen Textfelder in der XPage) geleert werden.
Nach drücken der F5-Taste tauchen die Inhalte dann (meistens) wieder auf.

Hat jemand eine Idee?
Der Fehler tritt bei manchen Usern verstärkt auf, mein manchen nie (bei identischen Browsern).
Auch mit aktiviertem bzw deaktiviertem Cache wurde getestet.

Vielen Dank & Viele Grüße
Marcus


Code
<xp:inputText
	id="Strasse_1"
	tabindex="1">
	<xp:eventHandler
		event="oninput"
		submit="true"
		refreshMode="partial"
		refreshId="Adresse_OK_1"
		id="eventHandler21">
		<xp:this.action>
			<![CDATA[#{javascript:getComponent("Adresse_OK_1").setRendered(false)}]]>
		</xp:this.action>
	</xp:eventHandler>
	<xp:this.styleClass>
		<![CDATA[#{javascript:return fieldValidate(this);}]]>
	</xp:this.styleClass>
	<xp:eventHandler
		event="onblur"
		submit="true"
		refreshMode="partial"
		refreshId="Strasse_1"
		id="eventHandler47">
	</xp:eventHandler>
</xp:inputText>


Code
XPage Properties:
xsp.ajax.renderwholetree=false
xsp.client.script.radioCheckbox.ie.onchange.trigger=early-onclick
xsp.error.page.default=true
xsp.library.depends=com.ibm.xsp.extlib.library,org.openntf.xsp.bootstrap.library,com.ibm.xsp.extlib.relational.library
xsp.persistence.mode=basic
xsp.resources.aggregate=true
xsp.theme=oneuiv2.1
xsp.session.timeout=120
xsp.partial.update.timeout=120

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Felder in einer XPages leeren sich
« Antwort #1 am: 26.11.15 - 11:08:52 »
Muss es denn sein, dass bei jedem Tastendruck eine Kommunikation mit dem Server angestoßen wird? Könnte man das Icon (zumindest während der Bearbeitungsphase) nicht auch clientseitig ausblenden?

Je nach Tippgeschwindigkeit und Reaktionszeit wird der arme Server da wohl nicht hinterherkommen...

Ergänzung: Schau dir mal beim Tippen in diesen Feldern via FireBug o.ä. die Konsole oder den Reiter Netzwerk an. Da müsste es, wenn ich das so richtig interpretiere, "ganz schön abgehen"...

« Letzte Änderung: 26.11.15 - 11:14:02 von Tim Pistor »

Offline MLoy

  • Junior Mitglied
  • **
  • Beiträge: 57
Re: Felder in einer XPages leeren sich
« Antwort #2 am: 02.12.15 - 07:24:14 »
Das Problem ist nur, dass ich an einer anderen Stelle im SSJS wissen muss ob sich was geändert hat, sprich ob Icon ein bzw. ausgeblendet ist.
Eigentlich würde es ja auch reichen im onChange das Icon auszublenden, allerdings hab ich dann das Problem das der User, wenn er das Feld verlässt um beispielsweise einen Button anzuklicken, den Button 2 mal anklicken muss, damit der dort hinterlegte Code ausgeführt wird

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Felder in einer XPages leeren sich
« Antwort #3 am: 02.12.15 - 08:18:51 »
Das Problem ist nur, dass ich an einer anderen Stelle im SSJS wissen muss ob sich was geändert hat, sprich ob Icon ein bzw. ausgeblendet ist.

Ohne das "große Ganze" zu kennen kann man da leider nur schwer weiterhelfen. Sobald SSJS im Spiel wäre, werden die Formulardaten ja eh übertragen und kannst dir den Feldwert holen.

... allerdings hab ich dann das Problem das der User, wenn er das Feld verlässt um beispielsweise einen Button anzuklicken, den Button 2 mal anklicken muss, damit der dort hinterlegte Code ausgeführt wird

Klingt nach dem Problem mit 2 parallelen Ajax-Calls gegen die XPage. Das geht nie gut. Gleichzeitig das Icon aktualisieren und den Button ausführen. Das ist ein Wettrennen... Firebug (etc.) würde das gut verdeutlichen..

Code
...<![CDATA[#{javascript:getComponent("Adresse_OK_1").setRendered(false)}]]>...

Was passiert eig. wenn das Feld erst leer ist... du "123" eingibst, und es dannach wieder löscht. Wird das Icon dann wieder eingeblendet?


Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: Felder in einer XPages leeren sich
« Antwort #4 am: 02.12.15 - 08:38:27 »

... allerdings hab ich dann das Problem das der User, wenn er das Feld verlässt um beispielsweise einen Button anzuklicken, den Button 2 mal anklicken muss, damit der dort hinterlegte Code ausgeführt wird

Klingt nach dem Problem mit 2 parallelen Ajax-Calls gegen die XPage. Das geht nie gut. Gleichzeitig das Icon aktualisieren und den Button ausführen. Das ist ein Wettrennen... Firebug (etc.) würde das gut verdeutlichen..

Hört sich eher nach geblockten Partial Refreshs an, so dass der erste Klick gar nicht erst ausgeführt wird.

Was mich verwundert ist, dass das überhaupt funktionieren soll; wurde die Komponente Adresse_OK_1 auf rendered = false gesetzt, geht der Partial Refresh des oninput events ins Leere...

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Felder in einer XPages leeren sich
« Antwort #5 am: 02.12.15 - 08:57:03 »
stimmt. Da sollte dann sowas kommen...

Offline MLoy

  • Junior Mitglied
  • **
  • Beiträge: 57
Re: Felder in einer XPages leeren sich
« Antwort #6 am: 03.12.15 - 15:23:34 »


Was mich verwundert ist, dass das überhaupt funktionieren soll; wurde die Komponente Adresse_OK_1 auf rendered = false gesetzt, geht der Partial Refresh des oninput events ins Leere...
@Sven: Eingeblendet wird das Icon dann wieder anderweitig.


Ich glaub ich hol mal (fachlich) ein bisschen weiter aus, dann wird es vielleicht etwas klarer warum ich sowas in der Art überhaupt benötige

Es geht im Groben um Adressprüfungen.

Ablauf (Auszug)
1. Adressen eingeben (Strasse, Plz, Ort)
2. Klick auf Button
3. Per Google wird die Adresse geokodiert und ggf. vervollständigt
4. zusätzlich werden die entsprechenden Koordinaten (LAT/LNG) abgelegt (wird später zur Streckenberechnung verwendet)
5. Das Icon "Adresse gültig" wird eingeblendet
6. Sollte der User jetzt die Strasse, Ort...  verändern sind die Koordinaten natürlich ungültig und das Icon muss ausgeblendet werden
7. Damit nachfolgende Funktionen (Streckenberechung zum Kunden usw.) ausgeführt werden können muss ein Kennzeichen für eine gültige Adresse vorhanden sein, sprich der Button müsste in diesem Fall erneut gedrückt werden.

Ich bin gerade am überlegen ob ich die ganze Ecke nicht umbaue.
Folgende Idee hab ich gerade im Kopf:
1. Nach betätigen des Knopfes werden die Adressfelder gesperrt und der Button zur Prüfung wird ausgeblendet.
2. Gleichzeitig wird ein weiterer Button eingeblendet, über den die Adresse wieder zur Bearbeitung "geöffnet" werden kann.

So hätte ich auch ein Kennzeichen ob es sich im eine gültige Adresse handelt und ich muss mich an keinerlei Events der Textfelder hängen.
Macht glaub ich mehr Sinn.
Was haltet ihr davon?

Gruß
Marcus

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: Felder in einer XPages leeren sich
« Antwort #7 am: 03.12.15 - 16:00:28 »
Was mich verwundert ist, dass das überhaupt funktionieren soll; wurde die Komponente Adresse_OK_1 auf rendered = false gesetzt, geht der Partial Refresh des oninput events ins Leere...
@Sven: Eingeblendet wird das Icon dann wieder anderweitig.
Also hat der Code oben gar nichts mit dem Problem zu tun?

Offline MLoy

  • Junior Mitglied
  • **
  • Beiträge: 57
Re: Felder in einer XPages leeren sich
« Antwort #8 am: 03.12.15 - 16:04:40 »
Was mich verwundert ist, dass das überhaupt funktionieren soll; wurde die Komponente Adresse_OK_1 auf rendered = false gesetzt, geht der Partial Refresh des oninput events ins Leere...
@Sven: Eingeblendet wird das Icon dann wieder anderweitig.
Also hat der Code oben gar nichts mit dem Problem zu tun?
Das kann ich eben nicht sagen ob es damit zu tun hat. Ich hab nur vermutet, dass durch die zahllosen Partial Refreshs die durch die Textfelder ausgelöst werden das Problem mit den leeren Felder entsteht, sicher bin ich mir da nicht. Leider kann ich es auch nicht nachstellen, es tritt eben nur sporadisch auf

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: Felder in einer XPages leeren sich
« Antwort #9 am: 03.12.15 - 16:12:04 »
Der Code geht nicht. Kann man ganz einfach nachstellen: Einfach auf ne neue XPage einfügen, und ein Label hinzufügen mit der Id Adresse_OK_1.
Ein paar Zeichen eintippeln, und Fehlermeldung abwarten.

Offline MLoy

  • Junior Mitglied
  • **
  • Beiträge: 57
Re: Felder in einer XPages leeren sich
« Antwort #10 am: 03.12.15 - 16:33:10 »
Bei mir kommt der Fehler auch, wenn ich den Code in eine leere XPage kopiere.
Seltsam, wenn ich den Code in der CustomControl (den gesamten Code kann ich leider nicht posten) habe kommt kein Fehler  ???
Wie kann denn das sein?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz