2010-12-29 205 views
13

¿Hay alguna manera de decir h:outputText de JSF (2.0) para insertar un salto de línea (o mejor aún: una cadena personalizada como "-") en palabras muy largas dentro de cadenas? Mi problema es que mi tabla de datos (PrimeFaces) se vuelve demasiado amplia cuando tengo una palabra muy larga dentro de una cadena sin espacios. Funciona cuando tengo un texto largo con palabras "normales", luego la siguiente palabra se imprime en la línea siguiente.h: salto de línea outputText para palabras largas dentro de cadenas

Si bien podría usar un convertidor, esto todavía significaría que tengo que buscar palabras largas dentro de una cadena y luego cortarlas cada vez que visualice el texto. Esto funcionaría de alguna manera para una pequeña cantidad de datos, pero necesita mucho poder de procesamiento cuando la base de datos se hace más grande (y lo será).

También pude escanear la cadena de palabras largas antes de insertarlas en la base de datos, lo que significa que solo tengo que procesar la cadena una vez, pero también que no puedo reconstruir completamente la cadena original si tuviera alguna vez lo necesita

¿Alguien tiene alguna entrada en esto?

gracias de antemano y saludos, Robert

+0

@ Robert M. Hola tengo el mismo problema. La respuesta de Balus C no funciona para mí, pero estoy usando jsf1.2 si muestras tu código, entonces será útil para mí. –

+0

La solución de BalusC no depende de la versión JSF en uso. Es una solución simple de CSS. El atributo styleClass existe en JSF 1.2 y representa un atributo de "clase" para el resultado HTML resultante.Si no funciona, esto es un problema en su HTML/CSS. Podría tratar de establecer un ancho fijo para el elemento HTML principal. –

Respuesta

17

Conjunto CSS word-wrap propiedad del elemento en cuestión a break-word.

<h:outputText styleClass="someClass" /> 

con

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

esto no funciona para mí. La clase css se muestra en reglas css coincidentes en Firebug, pero no sé por qué las palabras largas no se rompen. –

+2

@djaqeel: Un prerrequisito es que el elemento tenga un ancho fijo. – BalusC

+0

Oh gracias. Tienes razón. Cuando doy ancho fijo, funciona bien, pero quiero dar% widht. En% de ancho de edad, el ajuste de palabras está bien, pero el lapso en sí toma todo el ancho (como si calculase el ancho del tramo antes de aplicar el ajuste de palabras). –

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

salida

Very Wordy 
Table Column 
Heading 
+0

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

4

Esto se puede lograr mediante dos etapas

1) aplicar el estilo como table-layout: fijado a la panelGrid

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

2) A continuación, aplique el estilo de word-wrap break-word al <h:outputText /> como a continuación.

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

Espero que esto ayude.

0

puede utilizar h: inputTextarea en lugar de h: outputText, no me acuerdo establece sólo lectura atributo de verdadero y Eliminar borde de esta manera:

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

si tiene palabra muy larga en la cadena que puede utilizar como word-break: break-all; esto:

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

pero requería CSS3. link: word-break

Cuestiones relacionadas