Suchfunktion

Lograine

Mitglied
Hallo,
ich habe eine Suchfunktion auf einen firmeninternen ldap server geschrieben, die auch schon so halbwegs funktioniert.allerdings bekomme ich es irgendwie nciht hin nach nachname und firma zu suchen-
da die suche in der konsole nach nachname und firma funzt denke ich ich habe da einen denkfehler in meiner logik- den hoffentlich jemand findet!

die gui aus der heraus die methode mit einem button aufgerufen wird hat 3 textfelder und ich möchte je nachdem in welches davon etwas eingegeben wird nach etwas anderem suchen.

Was ich mir bei meiner if abfrage gedacht habe ist folgendes: wenn feldvorname und feldnachnname einen leeren string haben suche nach firma und analog so weiter- vielleicht geht das so ja gar nicht?
die suche nach vornamen funktioniert aber auch aus der gui heraus wie sie soll.

Java:
public List<Person> searchLdap() {
        
        Properties env = new Properties();
        env.put("java.naming.ldap.attributes.binary", "userCertificate");
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        SearchResult myRes;
        NamingEnumeration<SearchResult> myresults = null;
        SearchControls ctls = new SearchControls();
        env.put(Context.PROVIDER_URL, "ldap://unserldapserver");
        env.put(Context.SECURITY_AUTHENTICATION, "none");
        List<Person> list = new ArrayList<Person>();
        try {
            // Create the initial context
            LdapContext ctx = new InitialLdapContext(env, null);
           
            String[] attrIDs = { "cn", "telephonenumber", "o", 
                "givenname" , "sn"};
            ctls.setReturningAttributes(attrIDs);
            // Get the attributes of the object from ldap server
            if (m_mainForm.getLastName().getText().equals("")
                    || m_mainForm.getFirma().getText().equals("")) {
                myresults = ctx.search("ou=People, o=unsereFirma, c=de",
                        "givenName=" + m_mainForm.getFirstName().getText(),
                        ctls);
                
            } else if (m_mainForm.getFirstName().getText().equals("")
                    || m_mainForm.getFirma().getText().equals("")) {
                myresults = ctx.search("ou=People, o=unsereFirma, c=de",
                        "sn=" + m_mainForm.getLastName().getText(),
                        ctls);
                
            } else if (m_mainForm.getLastName().getText().equals("")
                    || m_mainForm.getFirstName().getText().equals("")) {
                myresults = ctx.search("ou=People, o=unsereFirma, c=de",
                        "o=" + m_mainForm.getFirma().getText(),
                        ctls);
            }
            
            while (myresults.hasMore()) {
                myRes = (SearchResult) myresults.next();
                Person pers = new Person(myRes.getAttributes());
                list.add(pers);
            }
            // Close the context when we're done
            ctx.close();
        } catch (NamingException ne) {
            ne.printStackTrace();
        }
        return list;
    }
 

Antoras

Top Contributor
Ich würde vorschlagen, dass du zuallererst deine Logik mal ein bisschen aufbereitest:
Java:
List<Person> sucheFirma(String name) {...}
List<Person> sucheVorname(String name) {...}
List<Person> sucheNachname(String name) {...}

// wenn Button gedrückt
String firma = textFeldMitFirma.getText();
String nachname = ...
if (firma.isEmpty() || nachname.isEmpty()) // anstelle von string.equals("")
  sucheVorname(vorname);
else if ...
Dann wird das ganze deutlich übersichtlicher und du kannst dich auf kleinere Codehäppchen konzentrieren bei denen ein Fehler liegt.
Noch so am Rande: Du schreibst im Text, dass die Textfelder von Vorname und Nachname beide leer sein müssen. Anstelle des UND-Operators (&&) verwendest du aber ausschließlich nur den ODER-Operator (||).
 

Lograine

Mitglied
upsder oder operator war da ganz klar an der falschen stelle- das und hat es gelöst danke und übersichtlicher ist es dank deines tips nun auch :)
 

Ähnliche Java Themen

Neue Themen


Oben