Suchen mit ajax(Primefaces)

Liebe Leute,

ich brauche wiederum eure Erfahrung. Also ziel ist es in ein string etwas eingeben und danach wir gesucht. Ich habe versucht dass es nach jede eingegebene Buchstabe sucht, aber es hängt irgendwie und ist nicht optimal. Obwohl es Antwort liefert, ist von den Benutzeransicht nicht gut

[XML]<h:outputText value=“Search” />
<p:inputText id=“search” value="#{article.eingabe}">
<p:ajax event=“keyup” update=“productTable” listener = “#{article.searchArticleWithString()}”/>
</p:inputText>
[/XML]

und ich habe Zweite Lösung wo nach dem Enter drücken gesucht wird

[XML]
<h:outputText value=“Search” />

<p:inputText id= “search” value = “#{article.eingabe}” onkeypress=“if (event.keyCode == 13) {onchange(); return false; }”>
<p:ajax event=“change” update=“productTable” listener="#{article.searchArticleWithString()}" />
</p:inputText>

[/XML]

Ist Möglichkeit, dass nach Eingabe der 3 Zeichen/Buchstaben sucht?
oder Hättet ihr vielleicht bessere Idee?
Ihr müsst mir keine Lösung schreiben. Eine Andeutung wurde mir auch gut helfen

Danke Danke euch für eure Hilfe

Hallo,

ich verstehe das Problem nicht genau. Was genau hängt irgendwie und was ist nicht optimal?

Sorry,
wenn ich so mache dass es nach jeder Eingabe sucht, wegen viele Daten browser hängt. Es liefert schon das Ergebnis aber ist nicht schnell.
Wenn man so implementiert, dass nach enter druck sucht, ist besser, aber ich hätte so gern, dass man nach Eingabe der 3 Buchstaben sucht. soll man das in java code implementieren oder bietet das ajax auch an?

Zeig doch mal bitte die Methode searchArticleWithString(), evenruell liegt es ja dort dran.

Dann stellt sich noch die Frage, wo wird gesucht? In einer Datenbank, in einer Datei oder in einer List/Map/Set?

Was hältst du von dieser herangehensweise?

Nach dem sich die eingabe ändert wartest du noch eine kurze Zeit, z.B. 1 Sekunde falls in dieser Zeit eine weitere Eingabe gamacht wird wartest du wieder ansonsten startetst du die Suche.

zweiter Vorschlag, die Suche wird wohl in einem Eigenen Thread arbeiten. falls Während der Suche eine neue Eingabe gemacht wird, wird die aktuelle Suche unterbrochen und einen neue gestartet.
Das müsste meiner Meinung auch so mit JSF funktionieren?

[QUOTE=AmunRa]Was hältst du von dieser herangehensweise?

Nach dem sich die eingabe ändert wartest du noch eine kurze Zeit, z.B. 1 Sekunde falls in dieser Zeit eine weitere Eingabe gamacht wird wartest du wieder ansonsten startetst du die Suche.

zweiter Vorschlag, die Suche wird wohl in einem Eigenen Thread arbeiten. falls Während der Suche eine neue Eingabe gemacht wird, wird die aktuelle Suche unterbrochen und einen neue gestartet.
Das müsste meiner Meinung auch so mit JSF funktionieren?[/QUOTE]
Diese Lösung ist sicherlich die angenehmste für den Benutzer. Allerdings ist das mit JSF-Standard-Komponenten nicht so einfach möglich. Es gibt am f:ajax direkt dafür keine Lösung.

Hier müsste man mit Javascript ein eine Lösung bauen, die über die JSF-JS-Api die Tabelle neu zeichnet (https://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/js-api/symbols/jsf.ajax.html)
@anni80
Was ist denn Dein Performance-Problem? Dauert searchArticleWithString() lange oder das Render auf den Ergebnissen?

mein Problem ist, wenn ich eine Buchstabe eingebe und fängt an zu suchen, kann ich nicht andere Buchstabe eingeben bis mit diese Buchstabe nicht fertig ist.
searchArticleWithString() schickt nur Request mit diese Eingabe und ich dachte sobald die Eingabe Länge nicht 3 ist, schickt man nichts. Ich wollte nur schönere Lösung.Ich dachte dass ajax sowas anbietet

Wie gesagt, mit der JSF-Javascript API kannst Du das umsetzen, ist allerdings nicht so trivial wie das f:ajax-Tag selbst. :slight_smile:

Ich bin mir nicht sicher, aber könnte man das nicht eventuell mit der p:remoteCommand Funktionalität lösen?
Also bei onChange in dem Textfeld den remoteCommand aufrufen und der macht ein partielles updaten?

@CyborgGamma das müsste gehen, der aufruf sollte nicht die Eingabe und ähnliches blockieren.

schaut doch mal hier das an, dass könnte eventuell passen
PrimeFaces ShowCase
jsf 2 - primefaces keyup event delay - Stack Overflow
jsf - Pass parameter to p:remoteCommand from JavaScript - Stack Overflow