Sự khác biệt giữa $ {} và # {} là gì?


80

Tôi đang lập trình trong JSF2 và NetBeans tạo ra nhiều trang có #{}chứa một biểu thức. Tuy nhiên, đôi khi trên web tôi tìm thấy ${}điều tương tự!

Có sự khác biệt nào không? Họ là ai?

Câu trả lời:


91
  • #{}dành cho các biểu thức trì hoãn (chúng được giải quyết tùy thuộc vào vòng đời của trang) và có thể được sử dụng để đọc hoặc ghi từ hoặc tới bean hoặc để thực hiện một cuộc gọi phương thức .
  • ${}là các biểu thức để giải quyết ngay lập tức , ngay khi gặp phải chúng sẽ được giải quyết. Chúng ở chế độ chỉ đọc.

Bạn có thể đọc thêm tại đây: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html


12

Một tìm kiếm trên google cho "Đồng bảng đô la của Máy chủ Java" cho kết quả sau, từ Câu hỏi thường gặp về ngôn ngữ biểu thức JBoss :

Tại sao một số biểu thức bắt đầu bằng bảng Anh và những biểu thức khác bắt đầu bằng ký hiệu đô la?

Đối với đặc điểm kỹ thuật EL, không có sự khác biệt. Tùy thuộc vào công nghệ sử dụng EL để quyết định ý nghĩa của nó. Đối với cả JSP và JSF, các biểu thức bắt đầu bằng ký hiệu bảng Anh có nghĩa là đánh giá trì hoãn và ký hiệu đô la có nghĩa là đánh giá ngay lập tức . Tất cả điều này liên quan đến thời điểm biểu thức thực sự sẽ được đánh giá trong quá trình xử lý yêu cầu. Dấu thăng được sử dụng trong các thành phần JSF bởi vì chúng tôi muốn biểu thức được đánh giá bởi vòng đời JSF chứ không phải bởi công cụ JSP hoặc Fac tràng.


1
@ jean hominal: cảm ơn bạn đã trả lời ... như tôi đã viết, tôi đã cố gắng tìm kiếm bằng cách sử dụng $ và # và nó không hoạt động ... howecver Tôi không biết rằng bạn gọi # "pound"! Vì vậy, cảm ơn bạn vì thông tin này quá!
Filippo1980

9

Đó là một câu hỏi hay! Tôi đã đối mặt với nó một lần và giống như bạn, đã gặp rất nhiều khó khăn để tìm ra câu trả lời ... cho đến khi tôi tình cờ tìm thấy phần tài liệu này :

Một tính năng chính của EL hợp nhất là hỗ trợ cho cả việc đánh giá biểu thức ngay lập tức và trả chậm. Đánh giá tức thời có nghĩa là công cụ JSP đánh giá biểu thức và trả về kết quả ngay lập tức khi trang được hiển thị lần đầu tiên. Đánh giá trì hoãn có nghĩa là công nghệ sử dụng ngôn ngữ biểu thức có thể sử dụng máy móc của riêng nó để đánh giá biểu thức vào một thời gian sau đó trong vòng đời của trang, bất cứ khi nào thích hợp để làm như vậy. Những biểu thức được đánh giá ngay lập tức sử dụng cú pháp $ {}, được giới thiệu với ngôn ngữ biểu thức JSP 2.0. Các biểu thức có việc đánh giá bị hoãn lại sử dụng cú pháp # {}, được đưa vào bởi công nghệ JavaServer Faces.



5

Tài liệu Java đưa ra lời giải thích sau:

$ {customer.name}
# {customer.name}

Cái trước sử dụng cú pháp đánh giá tức thì, trong khi cái sau sử dụng cú pháp đánh giá trì hoãn. Biểu thức đầu tiên truy cập thuộc tính name, nhận giá trị của nó, thêm giá trị vào phản hồi và được hiển thị trên trang. Điều tương tự cũng có thể xảy ra với biểu thức thứ hai. Tuy nhiên, trình xử lý thẻ có thể trì hoãn việc đánh giá biểu thức này đến một thời gian sau trong vòng đời của trang, nếu công nghệ sử dụng thẻ này cho phép.

Trong trường hợp của công nghệ JavaServer Faces, biểu thức của thẻ sau này được đánh giá ngay lập tức trong một yêu cầu ban đầu cho trang. Trong trường hợp này, biểu thức này hoạt động như một biểu thức rvalue. Trong một yêu cầu đăng lại, biểu thức này có thể được sử dụng để đặt giá trị của thuộc tính name với đầu vào của người dùng. Trong trường hợp này, biểu thức hoạt động như một biểu thức giá trị.

Đọc thêm tại đây: biểu thức giá trị

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.