2010-12-29 13 views
13

Có cách nào để yêu cầu h:outputText của JSF (2.0) chèn dòng ngắt (hoặc thậm chí tốt hơn: Chuỗi tùy chỉnh như "-") vào các từ rất dài trong chuỗi? Vấn đề của tôi là bảng dữ liệu của tôi (PrimeFaces) quá rộng khi tôi có một từ rất dài trong một chuỗi không có dấu cách. Nó hoạt động khi tôi có một từ dài "bình thường" từ, sau đó từ tiếp theo được in ở dòng tiếp theo.h: ngắt dòng outputText cho các từ dài trong chuỗi

Trong khi tôi có thể sử dụng trình chuyển đổi, điều này vẫn có nghĩa là tôi phải tìm các từ dài trong một chuỗi và sau đó cắt chúng mỗi khi tôi hiển thị văn bản. Điều này sẽ làm việc bằng cách nào đó cho một lượng nhỏ dữ liệu, nhưng cần rất nhiều sức mạnh xử lý khi cơ sở dữ liệu ngày càng lớn hơn (và nó sẽ).

Tôi cũng có thể quét chuỗi từ dài trước khi chèn vào cơ sở dữ liệu, điều này có nghĩa là tôi chỉ phải xử lý chuỗi một lần, nhưng cũng không thể tái tạo lại chuỗi gốc nếu muốn bao giờ cần nó.

Có ai có bất kỳ thông tin nào về điều này không?

Cảm ơn bạn trước Trân trọng, Robert

+0

@ Robert M. Xin chào, tôi có cùng một vấn đề. Balus C câu trả lời không làm việc cho tôi nhưng tôi đang sử dụng jsf1.2 nếu u hiển thị mã ur sau đó nó sẽ hữu ích cho tôi. –

+0

Giải pháp của BalusC không phụ thuộc vào phiên bản JSF đang sử dụng. Nó là một giải pháp CSS đơn giản. Thuộc tính styleClass tồn tại trong JSF 1.2 và hiển thị thuộc tính "class" cho kết quả đầu ra HTML.Nếu nó không hoạt động thì đây là một vấn đề trong HTML/CSS của bạn. Bạn có thể thử đặt chiều rộng cố định cho phần tử HTML gốc. –

Trả lời

17

Set CSS word-wrap tài sản của các yếu tố trong câu hỏi để break-word.

<h:outputText styleClass="someClass" /> 

với

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

điều này không hiệu quả đối với tôi. Các lớp css được hiển thị trong các quy tắc css phù hợp trong firebug, nhưng tôi không biết tại sao từ dài không phá vỡ. –

+2

@djaqeel: Yêu cầu trước tiên là phần tử có chiều rộng cố định. – BalusC

+0

Oh cảm ơn. Bạn đúng rồi. Khi tôi cho chiều rộng cố định, nó hoạt động tốt, nhưng tôi muốn cung cấp cho% widht. Trong độ tuổi%, từ gói là tốt nhưng span chính nó mất toàn bộ chiều rộng (như thể nó tính toán chiều rộng của span trước khi áp dụng word-wrap). –

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

Output

Very Wordy 
Table Column 
Heading 
+0

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

4

này có thể được thực hiện bằng hai bước

1) Áp dụng phong cách như bảng bố trí: cố định vào panelGrid

Ví dụ:<h:panelGrid style="table-layout:fixed;">

2) Sau đó áp dụng kiểu của từ ngắt kết nối từ đến <h:outputText /> như dưới đây.

ví dụ:<h:outputText style="word-wrap:break-word;">

Hope this helps.

0

bạn có thể sử dụng h: inputTextarea chứ không phải là h: outputText, không nhớ thiết lập thuộc tính chỉ đọc đúng và loại bỏ biên giới như thế này:

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

nếu bạn có từ rất lâu trong chuỗi, bạn có thể sử dụng như word-break: break-all; này:

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

nhưng nó yêu cầu CSS3. liên kết: word-break