2010-11-22 31 views
10

Tôi hiện đang tìm hiểu về JSF 2.0 và im rất vui vì sự tồn tại của tính năng phạm vi hội thoại này, rất hữu ích trong việc mở tab mới hoặc cửa sổ mới trên cùng một trang và có tài nguyên riêng biệt, không ghi đè nhau.JSF CDI: Phạm vi cuộc trò chuyện đậu [s] thực hành tốt nhất

Nhưng tôi rất tò mò về cách triển khai điều này theo cách tốt, về thời điểm bắt đầu cuộc trò chuyện và thời điểm đóng cuộc trò chuyện.

Trong trường hợp của tôi, tôi có mỗi hạt CDI cho mỗi trang JSF. Và chúng ta hãy nói rằng tôi có một menu, và khi nó được nhấp, điều này sẽ dẫn đến trang A, và từ A, có thể dẫn đến B, B có thể dẫn đến C, C có thể dẫn đến D, tất cả 4 trang này được kết nối trong một chuỗi.

Truy cập các thuộc tính bean của A từ hạt B hoặc C hoặc D, có thể truy cập các thuộc tính của B cũng có thể từ hạt C hoặc D và vv.

Bây giờ im khá bối rối về:

  • liệu tất cả những A C D B nên trong phạm vi trò chuyện hay không, hoặc có lẽ chỉ A? Bởi vì tôi nghĩ rằng đôi khi từ một trang khác là bên ngoài chuỗi ABCD, như một trang F, nó có thể điều hướng đến trang B, mặc dù tôi không biết cách cung cấp dữ liệu cho bean B chưa được cung cấp .
  • liệu tất cả những ABCD nên kết hợp thành một đậu
  • ở đâu và khi nào thì bắt đầu trò chuyện, im suy nghĩ về các nhà xây dựng , nhưng tôi không nghĩ rằng đó là một ý tưởng tốt, bởi vì tôi thích bắt đầu cuộc trò chuyện khi lần đầu tiên truy cập trang, không phải là đậu
  • ở đâu và khi nào phải ngừng cuộc nói chuyện , do đó có wont được nguồn lực chưa được sử dụng treo xung quanh

Hãy chia sẻ suy nghĩ của bạn về điều này.

+3

CDI không thuộc JSF chuẩn.CDI là viết tắt của Contexts và Dependency Injection (JSR-299) bao gồm các chú thích của gói 'javax.enterprise'. Phạm vi hội thoại cũng không phải là một phần của JSF chuẩn. Nó là một phát minh JBoss Seam trong thời kỳ JSF 1.2 và đã được thông qua bởi đặc tả JSF 2.0 là View Scope, có thể chuyển đổi bằng chú thích '@ ViewScoped'. Bây giờ, bạn đang thực sự nói về cái gì? – BalusC

+0

Xin chào BalusC, cảm ơn vì đã làm rõ. Tôi đã sử dụng thuật ngữ CDI chỉ để làm rõ những gì tôi đang sử dụng, nhưng có lẽ thông tin đó không liên quan đến câu hỏi của tôi, lời xin lỗi của tôi :) Theo tôi biết, @ViewScoped là một trang đơn được hiển thị lại và các thuộc tính sẽ kiên trì. Nhưng những gì tôi muốn đạt được từ phạm vi hội thoại là tôi có thể mở cùng một trang trên một số tab, với mỗi tab như thể có phạm vi phiên riêng của nó. Vì vậy, gửi giá trị 'albert' vào một myBean.name trên một tab sẽ không ghi đè lên myBean.name trên các tab khác. Nhưng tôi đã nhầm lẫn về nơi bắt đầu và kết thúc cuộc trò chuyện. – bertie

+0

Và điều này càng gây nhầm lẫn cho tôi nếu có 4 trang, ví dụ, trang A là trang duyệt, nơi người dùng có thể tìm kiếm, trang B là trang chi tiết, nơi người dùng có thể sửa đổi chi tiết, trang C là nơi người dùng có thể sửa đổi phụ chi tiết, v.v. Nếu tôi muốn có thể mở trang A trong một vài tab mà không ảnh hưởng đến trang khác, tôi phải sử dụng phạm vi hội thoại trên bean của A. Nhưng tôi cho rằng nó sẽ là phạm vi đối thoại quá cho B C và D? Ngoài ra về nơi và khi nào tôi nên bắt đầu/kết thúc cuộc trò chuyện. Ý tôi là, người dùng có thể mở các tab mới và đóng các tab. Làm thế nào tôi có thể phát hiện điều này và đóng cuộc trò chuyện? – bertie

Trả lời

11

JSF 2 cung cấp phạm vi Yêu cầu, Chế độ xem, Phiên và Ứng dụng. CDI giới thiệu phạm vi hội thoại, nhưng quan trọng hơn, nó giới thiệu một tiêu chuẩn mà các phạm vi mới có thể được thêm vào nền tảng này.

Phạm vi bạn mô tả có lẽ phù hợp hơn với phạm vi tùy chỉnh như phạm vi cửa sổ. Hai dự án thực hiện phạm vi này là:

  1. Apache MyFaces CODI
  2. IceFaces có JSF (không CDI) Window scope implementation.

Tuy nhiên, tôi khuyên bạn nên suy nghĩ lại cấu trúc hạt của mình. Tôi đã trở nên khá thích thú với phạm vi View, kết hợp với các tham số xem JSF 2 để truyền thông tin từ trang này sang trang khác (và từ một cá thể View scope đến một trang khác).

Phạm vi "Xem truy cập" của MyFaces có vẻ như một cách tiếp cận gọn gàng khác, trong đó một hạt đậu nằm trong phạm vi miễn là các trang bạn điều hướng qua duy trì tham chiếu đến phạm vi đó.

+0

Cảm ơn bạn! Tôi đã suy nghĩ về phạm vi xem cũng có, và nó có thể được sử dụng trong môi trường multitab hoặc multiwindow quá. Những gì bạn có nghĩa là bằng cách chuyển các tham số view từ một viewscope sang viewscope khác, là cái đã đạt được từ nút h: và f: param, và với f: metadata với f: viewParam lồng nhau, tôi có đúng không? Nếu không nhầm, nút h: sẽ dẫn đến yêu cầu GET và điều này gây ra sự cố cho tôi, vì đôi khi, việc nhấn xóa từ trang B (POST) sẽ trả về điều hướng đến trang A. Có cách nào để gửi tham số view từ B đến A trong trường hợp này? – bertie

+0

Bạn có thể nối chuỗi "? IncludeViewParams = true" vào quy tắc điều hướng và tham số chế độ xem được xác định trên "trang đích" sẽ tự động được bao gồm cho bạn. –

+0

Được rồi, cảm ơn. Đọc về điều này một lần, nhưng không bao giờ nghĩ đến việc sử dụng nó trước đây. Tôi nghĩ rằng tôi đã quen với phạm vi phiên mà mọi thứ đều ở nơi đó. Gotta thử này ra :) – bertie

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