23. januar 2003 - 14:46Der er
14 kommentarer og 1 løsning
Class.forName - klassen er fundet, får fejl når jeg bruger den
Hjælp!
Jeg er igang med at lave et taglib som skal kunne bruges i forskellige Java-projekter. Jeg gør brug af Struts til at hente nogle properties fra en property-fil. Hvis et projekt ikke understøtter Struts vil jeg bruge default-værdier i stedet for dem jeg ellers ville have fået fra property-filen. For at kunne styre dette bruger jeg følgende kode:
=== KODE ================================= 01 try { 02 Class.forName("org.apache.struts.util.MessageResources"); 03 org.apache.struts.util.MessageResources messages = org.apache.struts.util.MessageResources.getMessageResources("dk.tdc.c3utils.properties.language"); 04 05 this.mondayShortname = messages.getMessage("mondayShortname"); . . . 06 this.januaryName = messages.getMessage("januaryName"); . . . 07 } catch(ClassNotFoundException e) { 08 System.out.println("Klasse IKKE fundet"); 09 // Brug default-værdier 10} === KODE SLUT ============================
Når jeg kører en JSP-side som bruger tagget får jeg en intern server fejl som siger noget med: java.lang.NoClassDefFoundError: org/apache/struts/util/MessageResources
Ved at udkommentere linie 3 til og med 6 kan jeg konfirmere at Class.forname har smidt en ClassNotFoundException og catch-koden er blevet udført. Derfor må det være linie 3 som giver fejlen - men hvorfor?, da jeg jo forinden har konstateret at klassen findes.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Jeg har testet koden hvor jeg har undladt at instantiere MessageResources (linie 3), og her får jeg ingen fejl. Samtidig bliver catch-koden udført. Når jeg så tester koden hvor jeg bruger MessageResources (linie 3) får jeg fejlen og catch-koden når ikke at blive kørt. Derfor må det være i linie 3 at jeg får min NoClassDefFoundError.
Hvis du skal benytte dine ressourcer andre steder, end lige i denne klasse, burde du måske overveje om ikke man kunne finde et smart design, så din jsp-side er ldeles uvidende om, om den får sine værdier fra struts, eller fra default-værdier...
Jeg er lige kommet hjem fra skiferie, så derfor har jeg ikke reageret på dine indlæg. Det varer lige nogle dage før jeg skal arbejde videre på mit projekt. Jeg vil vende tilbage igen når jeg har afprøvet din kode. Tak for kommentarerne - jeg vil også kigge på det at bruge property-filer selvom struts ikke er tilstede. Mvh. hangaard
Hej soelvpil, Så er jeg kommet igang med projektet igen. Jeg har ikke afprøvet din løsning, da jeg har valgt en helt anden fremgangsmåde; en proxy-klasse som kalder en Struts-handler klasse hvis Struts-klassen findes ellers kaldes en Property-klasse. De 2 klasser har begge en getValue-metode som på hver deres måde henter properties fra en property-fil (altså bruger jeg det råd du gav mig om ikke at bruge default-værdier). Tak for hjælpen!
Det lyder som en god løsning, du har fundet (faktisk var det noget i den retning jeg forestillede mig med bemærkningen om et smart design, så jsp'en var uvidende om eksistensen af struts eller ej).
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.