Làm thế nào để sử dụng && trong biểu thức boolean EL trong Khuôn mặt?


83

Tôi đang gặp một chút khó khăn trong việc tìm hiểu cách thực hiện và các biểu thức EL trong Khuôn mặt. Vì vậy, về cơ bản tôi có:

<h:outputText id="Prompt"
    value="Fobar" 
    rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />

Nhưng tôi tiếp tục nhận được:

Đã theo dõi lỗi [dòng: 69] Tên thực thể phải ngay sau dấu '&' trong tham chiếu đối tượng.

Câu trả lời:


162

Khuôn mặt là một công nghệ xem dựa trên XML. Là &một ký tự đặc biệt trong XML đại diện cho phần bắt đầu của một thực thể giống như &amp;phần kết thúc bằng ;ký tự. Bạn cần phải thoát khỏi nó, điều này thật tệ:

rendered="#{beanA.prompt == true &amp;&amp; beanB.currentBase != null}"

hoặc sử dụng andtừ khóa thay thế, được ưu tiên hơn vì tính dễ đọc và khả năng bảo trì:

rendered="#{beanA.prompt == true and beanB.currentBase != null}"

Xem thêm:


Không liên quan đến vấn đề cụ thể, so sánh boolean với boolean không có ý nghĩa gì khi biểu thức đã mong đợi một kết quả boolean. Tôi muốn loại bỏ == true:

rendered="#{beanA.prompt and beanB.currentBase != null}"

2
Việc ghép JSF thực sự sẽ nhận ra trường hợp này và đưa ra chẩn đoán tốt hơn. Đó là một vấn đề đơn giản, nhưng rất khó hiểu cho người mới bắt đầu.
Mike Braun

6

Ngoài câu trả lời của BalusC, hãy sử dụng Java RegExp sau để thay thế &&bằng and:

Search:  (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3

Bạn đã chạy thay thế biểu thức chính quy này nhiều lần để tìm tất cả các lần xuất hiện trong trường hợp bạn đang sử dụng> 2 chữ trong biểu thức EL của mình. Vui lòng thay thế # đứng đầu bằng $ nếu cú ​​pháp biểu thức EL của bạn khác.

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.