2010-12-29 7 views
13

Czy istnieje sposób powiedzieć h:outputText JSF (2.0), aby wstawić podział wiersza (lub jeszcze lepiej: niestandardowy ciąg jak "-") na bardzo długie wyrazy w ciągu ciągów? Moim problemem jest to, że mój zestaw danych (PrimeFaces) staje się zbyt szeroki, gdy mam bardzo długie słowo w ciągu znaków bez spacji. Działa, gdy mam długie "normalne" słowa, a następne słowo jest drukowane w następnej linii.h: outputText linia podziału dla długich słów w ciągu ciągi znaków

Chociaż mógłbym użyć konwertera, to nadal oznacza, że ​​muszę szukać długich wyrazów ciągu znaków, a następnie wyciąć je za każdym razem, gdy wyświetlany tekst. To działałoby jakoś za niewielką ilość danych, ale wymaga dużej mocy obliczeniowej, gdy baza danych staje się coraz większa (i tak będzie).

Mogę również zeskanować ciąg znaków dla długich słów przed wstawieniem do bazy danych, co oznaczałoby, że muszę przetworzyć ciąg tylko raz, ale także, że nie jestem w stanie w pełni zrekonstruować oryginalnego ciągu, jeśli kiedykolwiek tego potrzebuję.

Czy ktoś ma jakiekolwiek dane wejściowe na ten temat?

Z góry dziękuję i pozdrawiam, Robert

+0

@ Robert M. Witam mam ten sam problem. Odpowiedź Balus C nie działa dla mnie, ale używam jsf1.2, jeśli pokazujesz kod ur, to przyda mi się. –

+0

Rozwiązanie BalusC nie zależy od używanej wersji JSF. Jest to proste rozwiązanie CSS. Atrybut styleClass istnieje w JSF 1.2 i renderuje atrybut "class" do wynikowego wyjścia HTML.Jeśli to nie działa, jest to problem w twoim HTML/CSS. Możesz spróbować ustawić stałą szerokość dla nadrzędnego elementu HTML. –

Odpowiedz

17

Zestaw CSS word-wrap własność elementu w pytaniu do break-word.

<h:outputText styleClass="someClass" /> 

z

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

to nie działa dla mnie. Klasa css jest wyświetlana w dopasowanych regułach css w firebug, ale nie wiem, dlaczego długie słowa nie łamią się. –

+2

@djaqeel: Warunkiem wstępnym jest, że element ma stałą szerokość. – BalusC

+0

Och dzięki. Masz rację. Kiedy podaję stałą szerokość, działa dobrze, ale chcę dać% widht. W% szerokości wieku, zawijanie słów jest w porządku, ale samo span zajmuje całą szerokość (tak jakby obliczał szerokość przęsła przed zastosowaniem zawijania wyrazów). –

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

Wyjście

Very Wordy 
Table Column 
Heading 
+0

Źródło: [blog.michaelscepaniak.com] (http://blog.michaelscepaniak.com/jsf-render-line-breaks-in-tue-outputtext-tag) – Kai

4

Można to osiągnąć przez dwóch etapach

1) stosują styl jako stół-layout: fixed do panelGrid

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

2) Następnie zastosuj styl słowa kluczowego z word-wrap do <h:outputText /> jak poniżej.

Np:<h:outputText style="word-wrap:break-word;">

Nadzieja to pomaga.

0

można użyć h: inputTextarea zamiast h: outputText, nie pamiętam ustawiony atrybut tylko do odczytu prawdziwe i usunąć obramowanie tak:

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

jeśli masz bardzo długie słowo String można użyć word-break: break-all; jak to:

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

, ale wymagało to CSS3. Link: word-break

Powiązane problemy