2010-12-29 4 views
13

Gibt es eine Möglichkeit, h:outputText von JSF (2.0) zu sagen, einen Zeilenumbruch (oder noch besser: eine benutzerdefinierte Zeichenfolge wie "-") in sehr langen Wörtern innerhalb von Strings einzufügen? Mein Problem ist, dass meine Datentabelle (PrimeFaces) zu breit wird, wenn ich ein sehr langes Wort innerhalb einer Zeichenfolge ohne Leerzeichen habe. Es funktioniert, wenn ich einen langen Text "normale" Wörter habe, dann wird das nächste Wort in der nächsten Zeile gedruckt.h: outputText Zeilenumbruch für lange Wörter in Strings

Während ich einen Konverter verwenden könnte, würde dies immer noch bedeuten, dass ich lange Wörter innerhalb einer Zeichenfolge suchen und sie dann jedes Mal schneiden muss, wenn ich den Text anzeigen. Dies würde für eine kleine Menge von Daten funktionieren, aber benötigt viel Rechenleistung, wenn die Datenbank größer wird (und es wird).

Ich könnte auch die Zeichenfolge für lange Wörter vor dem Einfügen in die Datenbank scannen, was bedeuten würde, dass ich nur die Zeichenfolge verarbeiten muss, aber auch, dass ich nicht in der Lage bin, die ursprüngliche Zeichenfolge vollständig zu rekonstruieren, wenn ich würde ich brauche es immer.

Hat jemand irgendwelche Eingaben dazu?

Vielen Dank im Voraus und mit freundlichen Grüßen, Robert

+0

@ Robert M. Hallo, ich habe das gleiche Problem. Balus C antwort funktioniert nicht für mich, aber ich benutze jsf1.2 wenn du deinen urcode zeigst, dann wird es für mich nützlich sein. –

+0

Die Lösung von BalusC hängt nicht von der verwendeten JSF-Version ab. Es ist eine einfache CSS-Lösung. Das styleClass-Attribut existiert in JSF 1.2 und rendert der resultierenden HTML-Ausgabe ein "class" -Attribut.Wenn es nicht funktioniert, ist dies ein Problem in Ihrem HTML/CSS. Sie könnten versuchen, eine feste Breite für das übergeordnete HTML-Element festzulegen. –

Antwort

17

Sets CSS word-wrap Eigenschaft des Elements in Frage zu break-word.

<h:outputText styleClass="someClass" /> 

mit

.someClass { 
    word-wrap: break-word; 
} 
+1

dies funktioniert nicht für mich. Die css-Klasse zeigt in gematchten css-Regeln in Firebug, aber ich weiß nicht, warum lange Wörter nicht brechen. –

+2

@djaqeel: Voraussetzung ist, dass das Element eine feste Breite hat. – BalusC

+0

Oh danke. Du hast recht. Wenn ich feste Breite gebe, funktioniert es gut, aber ich möchte% widht geben. In% age width ist der Zeilenumbruch in Ordnung, aber der Bereich selbst nimmt die gesamte Breite ein (als ob er die Breite des Bereichs berechnet, bevor er den Zeilenumbruch anwendet). –

11
<h:outputText value="Very Wordy&lt;br /&gt;Table Column&lt;br /&gt;Heading" escape="false" /> 

Ausgabe

Very Wordy 
Table Column 
Heading 
+0

Quelle: [blog.michaelscepaniak.com] (http://blog.michaelscepaniak.com/jsf-render-line-breaks-in-the-outputtext-tag) – Kai

4

Dies kann durch zwei Schritte

1) Anwenden Stil als Tisch-Layout erreicht werden: Fixiert auf dem panelGrid

Eg:<h:panelGrid style="table-layout:fixed;">

2) Wenden Sie dann Stil an von Word-Wrap Break-Word auf die <h:outputText /> wie folgt.

Z. B:<h:outputText style="word-wrap:break-word;">

Hoffnung, das hilft.

0

Sie können h verwenden: inputTextarea statt h: output, weiß noch nicht festlegen Nur-Lese-Attribut wahr und Rand abschneiden wie folgt aus:

<h:inputTextarea rows="10" cols="50" readonly="true" value="multiline String" style="border-color: white" /> 
2

wenn Sie sehr lange Wort in String haben, können Sie word-break: break-all; verwenden wie dies:

<h:outputText value="111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" style="word-break: break-all;"/> 

aber es erforderte CSS3. Link: word-break