Häufig muss man mit Java in relationalen Datenbanken nach Texten suchen. Dabei sollte die Groß- und Kleinschreibung nicht von Bedeutung sein.
Doch wie erreicht man dies?
Komplizierter wird dies noch, wenn man die deutschen Sonderzeichen beachtet. Was passiert mit eine "ß" ? Wie wird es umgesetzt?
Die Antwort ist folgende. Sowohl die Daten in der Datenbank, als auch die Java-Strings müssen mit toLower() auf lower-case umgestellt werden.
Im folgenden kommt ein Real-World-Beispiel, wie es oft in unseren Programmen auftaucht. Wenn man ein "_" als searchtTerm übergibt gibt es keine Einschränkung. Man beachte, das im DB2 mit java die substr()-funktion aufgerufen werden muss, sonst klappt das nicht.
select distinct(BERATERNAME) as beratername from ALMAUSR.RSB_RUECK where lower(BERATERNAME) like :searchTerm or ('_' = substr(:searchTerm, 1, 1))
Bei der Suche im Active Directory sie die Anzahl der Ergebnisse künstlich beschränkt. Dies ist ein Mechanismus im Active Directory um sich gegen zu große Ergebnismengen zu schützen. Dies ist verständlich, da das AD ein Herzstück der IT-Landschaft ist und auf keinen Fall überlastet werden darf. Es gibt jedoch sehr viele Organisationen die mehr als 1499 Mitarbeiter bzw. UserIds verwalten.
AD 2003 Liefert 1499 Datensätze zurück - Beim AD 2000 sind das 999. Um die Übrigen Datensätze auszulesen muss man manuell Pagen.
Wenn man z.B. nach einer Gruppe mit mehr als 3000 Mitglieder such muss man dies in 3 Etappen machen.
Als Antwort bekommt man nach der ersten Anfrage :"member;range=0-1499" member;range=1500-2999 member;range=3000-*
Das Sternchen bedeutet, dass es keine weiteren Ergebnisse gibt.
Der nun folgende Code beschreibt kann als Lösung
package de.wwag.arch.portal.service.benutzer.ads; /** * range.java * December 2004 * Sample JNDI application to demonstrate range retrieval * */
// Create the initial directory context LdapContext ctx = new InitialLdapContext(hashtable,null);
// Create the search controls SearchControls searchCtls = new SearchControls();
//Specify the search scope searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//specify the LDAP search filter String searchFilter = "(&(objectClass=group)(CN=GAP_ALMA_BENUTZER_PROD))";
//Specify the Base for the search String searchBase = "dc=ww-intern,dc=de";
//initialize counter to total the group members and range values int totalResults = 0; int Start = 0; int Step = 1500; int Finish = 1499; boolean Finished = false; String Range;
//loop through the query until we have all the results while (!Finished) {
//Specify the attributes to return Range = Start + "-" + Finish; String returnedAtts[]={"member;Range=" + Range}; searchCtls.setReturningAttributes(returnedAtts);
//Search for objects using the filter NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);
//Loop through the search results while (answer.hasMoreElements()) { SearchResult sr = (SearchResult)answer.next();
System.out.println(">>>" + sr.getName());
//Print out the members
Attributes attrs = sr.getAttributes(); if (attrs != null) {
Idee... Anzeigen einer Bitte warten Seite - Bis der eigentliche Content geladen wurde. Dann die Seite ersetzten.- Ja - Das ist möglich....
In dieseem Beispiel wurde ein asynchroner Ajax-Aufruf gemacht. Die Umsetzung erfolgt mittels jQuerey. Das Ergebnis des Aufrufs ersetzt den aktuellen Inhalt. Die 3 zentralen methoden sind:
Moderne Anwendungen arbeiten oft mit einem zentrierten Layout. Wie läßt sicht die Komponente in einer html-Seite zentrieren?
Man führt eine Hauptelement ein, und tut dieses zentrieren. Das Hauptelement kann ein DIV eine TABLE oder ein sonstiges Element sein, in dem sich unterelmenten einfügen lassen.
Das Zentrieren wird mit der 2 Style-Eingenschaften gemacht: margin-left:auto und margin-right:auto.
Um den IE zu debuggen wünscht man sich bisweilen Zugriff auf den Firebug zu haben. Leider ist dies nicht der Fall. Außerdem kann man in größren Unternehmen auch kein weiteren Tools zum Debuggen in den Browser einbauen. Die aktuelle Beschreibung zeigt wie man den Firebug-Light aktiviert. Hierzu muß der unten beschriebene Code in die URL-Zeile des IE gepasted werden. Nach betätigen von Enter ist der Firebug aktiviert. Fertig.
Die 2 jQuery-Plugins lassen sich sehr gut miteinander kombinieren. Die Anforderung war folgende:
Valierung auf dem Client -> Validationplugin
Übermittlung des Formulars im Hintergrund (AJAX) -> Formplugin
So wenig Code wie möglich selber implementieren.
Beide Plugins sind für sicht genommen schon sehr genial. Das Validationplugin gehört zu den wirklich guten plugins und läßt sich super schnell in die Seite einbauen.
Das nun Folgende Codeschnipsel wurde für Portlets in Form einer JSP konzipiert. Eine verwendung innerhalb e
// post-submit callback function showResponse(responseText, statusText, xhr, $form) { alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + '\n\nThe output div should have already been updated with the responseText.'); }
Es gibt verschieden Arten von Buttons in HTML. An dieser Stelle wir explizit kein Submit-Button verwendet () Sondern der button-Tag. Durch betätigen dieses Buttons wird die valierungsMethode aufgerufen.
Wir konnten die die Commons-Fileupload lib von Apache nicht in unserer Anwendung verwenden, da die serverRessource-Methode des Porlet286-Standards nicht unterstüzt wird. Wir haben die Klassen aber fast 1:1 nachgebaut, und um die relevanten Stellen umgeschrieben. Theoretisch könnten wir den Code jetzt contributen, so das Apache Commons-Fileupload dies zukünftig unterstüzten könnte.