04. oktober 2001 - 22:11Der er
27 kommentarer og 1 løsning
Linebreak i database?
I mit utrættelige forsøg på at lave et velfungerende websted i jsp er jeg kommet til endnu et lille problem.
Når jeg skriver en tekst ind i en database, fra en detail page, gemmer den ikke linjeskiftende, medmindre jeg laver dem ved direkte at skrive < br >...
Jeg bruger gnujsp på min server... Håber der er nogen der kan hjælpe...
hvis du indtaster data med linebreaks, og får dem ud igen. Så er der sikkert linebreaks, men browseren fortolker html, og der bliver \\n ikke fortolket som et linebreak, men det gør <br> til gengæld.
Skal du have kode til det? Her er en sjov en med StringTokenizer:
public static String linebreakToHTML(String sMessageText) { /* In this example we have to parse the Messagetext because it comes from a textarea. A textarea may contain linebreaks which html will not make visible. So we replace every "\\n" with a "<br>". */ StringTokenizer oT = new StringTokenizer(sMessageText, \"\\n\"); String sHTMLMessage = new String(\"\"); while (oT.hasMoreTokens()) { sHTMLMessage = sHTMLMessage.concat(oT.nextToken()); sHTMLMessage = sHTMLMessage.concat(\"<br>\"); } return sHTMLMessage; }
erik: Dit eksempel er godt bortset fra en lille detalje som er dyr.
Brug ALDRIG en String på den måde du gør, det tager oceaner af tid. Når du hele tiden skal tilføje noget til en String brug \'StringBuffer\' istedet. En String er immutable.
På et enkelt tegn har jeg ingen fornemmelse for det, men jeg vil da tro, at hvis man propper flere tegn ind som skilletegn i en StringTokenizer, så er den (lidt) hurtigere end hvad du ville kunne lave selv med indexOf-er.
I ovennævnte metode er det egentlig lidt \"overkill\" at lave resultatet som en streng, der så skal skrives ud. Det burde være hurtigst at skrive den ud direkte i while løkken. Hvis altså hastighed er vigtigst ;)
Jeg kan lukke det, men jeg ville gerne løse problemet. Det jeg ikke kan finde ud af lige nu er, hvordan jeg får teksten ud af databasen og ind i variablen nl2br. Hvordan gør jeg det?
Fra din database får du et resultset, denne scanner du så igennem. Den text du vil have ud henter du fra resultset med rs.getString(\"KolonneNavn\");
Jeg forudsætter dit resultset hedder \'rs\' og du skal rette \'KolonneNavn\' så det passer med navnet på den kolonne hvori data ligger. Altså navnet i databasen.
Metoden getString() returnerer en String som du sender igennem den metode jeg har postet.
En anden enkelt mulighed var at pakke din tekst ind i et <pre>Tekst</pre>. Dette gør at browseren ved at teksten er formateret i forvejen, dvs. den respekterer linieskift og mellemrum.
Jeg kan ikke få den til at udføre det du foreslår disky. Problemet er måske at den henter det på en speciel måde...
mf1616 jeg har prøvet det du foreslår, det virker, men der er et lille problem. Nu kan jeg ikke længere bestemme hvordan teksten skal være... I hvert fald ikke når jeg henter teksten, og jeg ved ikke hvordan jeg skal gemme den med en bestemt størrelse eller skrifte type...
Jeg har endelig fundet en anden metode til at få det til at virke. Problem har nok været at jeg henter oplysninger osv. på en anden måde så det du har lavet har ikke virket på min side. Men jeg har bruget nget af det du har skrevet som udgangspunkt, så du får pointsene. Tak for hjælpen og undskyld at det har taget så lang tid, men det har været en utrolig besværlig proces...
Det er bare helt okay, du sprøger bare her igen hvis det begynder at drille igen :)
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.