2011-12-13 29 views
7

Tôi vừa học được rằng với vận tốc apache, các chỉ thị cũng thêm vào khoảng trắng.Chỉ thị vận tốc cũng thêm khoảng trắng?

Vì vậy, ví dụ:

#foreach ($record in $rows) 
#foreach($value in $record) 
$value 
#end 

#end 

Với một cái gì đó như thế này tôi kết thúc nhận được dòng thêm cho #foreach báo cáo, các #end báo cáo vv

Đây không phải là những gì tôi muốn, vì vậy tôi tìm thấy tôi có thể chặn nhận xét ở cuối các dòng như sau:

#foreach ($record in $rows)#* 
*##foreach($value in $record)#* 
*#$value #* 
*##end 

#end 

Nhưng điều này khá xấu để đọc. Có cách nào để nói với động cơ vận tốc không định dạng chỉ thị của tôi không?

Có thể tôi đang làm điều gì khác sai?

Cảm ơn.

+0

Đó là một điều luôn làm tôi khó chịu với Velocity - tôi sử dụng nó để tạo Java, vì vậy tôi có thể định dạng nó trong IDE sau khi tạo. JET (Java emitter mẫu) dường như không bị vấn đề này. –

+0

Dường như đây là thứ mà mọi người đưa ra và dọn dẹp sau này, ví dụ: [SO câu hỏi này] (http://stackoverflow.com/questions/2277494/need-a-java-based-html-prettifier-to-clean-up-velocity-generated-html) liên quan đến việc làm sạch HTML sau khi tạo. –

+0

Hmm, điều đó thật tệ. Tôi cho rằng "công việc của tôi" sẽ phải làm sau đó. – javamonkey79

Trả lời

4

Tôi nghĩ rằng bạn đang mắc kẹt với nó (xem Velocity Whitespace Gobbling bài viết) mặc dù dòng bình luận sẽ là một ngăn nắp nhỏ:

#foreach ($record in $rows)## 
#foreach($value in $record)## 
$value ## 
#end 

#end 

Hoặc bạn chỉ có thể bóp mọi thứ vào một dòng:

#foreach($record in $rows)#foreach($value in $record)${value}#{end}#{end} 
+0

## không hoạt động đối với tôi. Chỉ đặt các macro của tôi trên một dòng duy nhất. Bất kỳ ý tưởng tại sao điều này sẽ là? –

1

Điều này thực sự phổ biến đối với hầu hết các ngôn ngữ lập trình và lý do trực tiếp từ quá trình xử lý đơn giản. Hãy xem xét ví dụ sau (này thực sự là GSP được sử dụng bởi Grails nhưng ý tưởng là như nhau):

<g:each var="x" in="exes"> 
    ${x.y} 
</g:each> 

Cách này được xử lý là đầu tiên một thẻ (hoặc trong trường hợp Velocity của, chỉ thị) là xác định. Bởi vì chính thẻ/chỉ thị chứa các hướng dẫn xử lý nội dung của thẻ, các nhãn/chỉ thị được xóa và tất cả nội dung ngay sau dấu bắt đầu và ngay trước khi dấu kết thúc được sử dụng làm đích cho quá trình xử lý. Điều này bao gồm tất cả các khoảng trắng, bởi vì làm sạch đầu ra trước sẽ khó khăn hơn rất nhiều. Điều này tất nhiên không có nghĩa là bạn không thể làm điều đó, như Edd chỉ ra hoặc rằng đây sẽ là lựa chọn thiết kế hợp lý nhất ở nơi đầu tiên, nhưng đôi khi làm những việc đơn giản hơn là quan trọng hơn là tạo ra đẹp đánh dấu - sau khi tất cả, hầu hết nếu không phải tất cả các bộ xử lý đánh dấu không thực sự quan tâm nếu bạn có <p>some\ncontent</p> hoặc <p>some\n\n\n\t\tcontent</p>.

Các vấn đề liên quan