2010-12-29 3 views
13

Есть ли способ сообщить h:outputText JSF (2.0), чтобы вставить разрыв строки (или даже лучше: пользовательскую строку типа «-») в очень длинные слова в строках? Моя проблема в том, что моя таблица данных (PrimeFaces) становится слишком широкой, когда у меня очень длинное слово в строке без пробелов. Он работает, когда у меня есть длинные текстовые «нормальные» слова, затем следующее слово печатается в следующей строке.h: outputText разрыв строки для длинных слов внутри строк

Хотя я мог бы использовать конвертер, это все равно означало бы, что я должен искать длинные слова внутри строки, а затем разрезать их каждый раз, когда я показываю текст. Это будет работать как-то для небольшого объема данных, но требует большой вычислительной мощности, когда база данных станет больше (и она будет).

Я также мог сканировать строку для длинных слов перед вставкой в ​​базу данных, что означало бы, что мне нужно обработать только одну строку, но также и то, что я не могу полностью восстановить исходную строку, если бы я когда-либо нуждаются в этом.

У кого-нибудь есть ввод?

Спасибо заранее и наилучшими пожеланиями, Роберт

+0

@ Robert M. Привет, у меня такая же проблема. Balus C ответ не работает для меня, но я использую jsf1.2, если u показывает код ur, тогда он будет полезен для меня. –

+0

Решение BalusC не зависит от используемой версии JSF. Это простое решение для CSS. Атрибут styleClass существует в JSF 1.2 и отображает атрибут «class» для результирующего вывода HTML.Если это не работает, это проблема в вашем HTML/CSS. Вы можете попытаться установить фиксированную ширину для исходного элемента HTML. –

ответ

17

Set CSS word-wrap свойство данного элемента к break-word.

<h:outputText styleClass="someClass" /> 

с

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

Это не работает для меня. Класс css показывает в согласованных правилах css в firebug, но я не знаю, почему длинные слова не ломаются. –

+2

@djaqeel: Предварительное требование состоит в том, что элемент имеет фиксированную ширину. – BalusC

+0

О, спасибо. Ты прав. Когда я даю фиксированную ширину, она работает нормально, но я хочу дать% widht. В% age width, wrapper слов отлично, но сам диапазон занимает всю ширину (как если бы он вычислял ширину диапазона перед применением word-wrap). –

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

Выход

Very Wordy 
Table Column 
Heading 
+0

Источник: [blog.michaelscepaniak.com] (http://blog.michaelscepaniak.com/jsf-render-line-breaks-in-the-outputtext-tag) – Kai

4

Это может быть достигнуто с помощью двух стадий

1) Применить стиль как таблицы-макет: крепится к panelGrid

Например:<h:panelGrid style="table-layout:fixed;">

2) Затем примените стиль слова обертывания слова до <h:outputText />, как показано ниже.

например:<h:outputText style="word-wrap:break-word;">

Надеется, что это помогает.

0

вы можете использовать час: inputTextarea, а не ч: outputText, не помню, как установить атрибут только для чтения истинны и удалить границы, как это:

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

, если у вас есть очень длинное слово в строку, которую вы можете использовать как word-break: break-all; это:

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

но это требовало CSS3. link: word-break

Смежные вопросы