2013-08-22 27 views
5

Tôi có một ứng dụng web chạy Java Tapestry, với rất nhiều nội dung do người dùng nhập. Định dạng duy nhất mà người dùng có thể nhập là dấu ngắt dòng.Sử dụng OutputRaw trong Java Tapestry

Tôi gọi một chuỗi văn bản từ cơ sở dữ liệu và xuất nó thành mẫu. Chuỗi chứa dấu ngắt dòng là/r, mà tôi thay thế bằng < br>. Tuy nhiên, chúng được lọc trên đầu ra, vì vậy văn bản trông giống như b <br> văn bản văn bản b <br> văn bản. Tôi nghĩ rằng tôi có thể sử dụng outputRaw hoặc writeRaw để sửa lỗi này, nhưng tôi không thể tìm thấy bất kỳ thông tin nào về cách thêm outputRaw hoặc writeRaw vào một lớp hoặc mẫu Tapestry.

Lớp là:

Các TML là:

<p class="categorytext" id="${currentCategory.id}"> 
${getText()} 
</p> 

tôi sẽ thêm đầu ra liệu xử lý để có dòng tôi phá vỡ màn hình đúng cách ở đâu?

Trả lời

3

Để trả lời câu hỏi của riêng tôi, đây là làm thế nào để ra kết quả của $ gettext() như html liệu:

Thay đổi TML từ này:

<p class="categorytext" id="${currentCategory.id}"> 
${getText()} 
</p> 

Để này:

<p class="categorytext" id="${currentCategory.id}"> 
<t:outputraw value="${getText()}"/> 
</p> 
+4

Lưu ý rằng '' '' '' được viết tốt hơn là '' '' '' –

3

Lưu ý rằng điều này khá nguy hiểm vì bạn có thể mở trang web của mình đến một cuộc tấn công XSS. Bạn có thể cần phải sử dụng jsoup hoặc tương tự để khử trùng đầu vào.

+0

Có , điểm tốt. – Ila

2

Một thay thế có thể là:

<p class="categorytext" id="${currentCategory.id}"> 
    <t:loop source="textLines" value="singleLine"> 
    ${singleLine} <br/> 
    </t:loop> 
</p> 

này giả định một một phương pháp getTextLines() trả về một danh sách hoặc mảng của Strings; nó có thể sử dụng cùng một logic như getText() của bạn nhưng chia kết quả trên CR. Điều này sẽ làm tốt hơn khi các dòng văn bản chứa các ký tự không an toàn như & hoặc <. Với một ít công việc hơn, bạn có thể thêm <br> chỉ giữa các dòng (không phải sau mỗi dòng) ... và điều này cảm thấy như nó có thể là một thành phần tốt đẹp là tốt.