Tôi muốn biết nếu có một bộ chặn trong JSF (như chúng ta sử dụng trong Spring), và làm thế nào để chúng ta thực hiện nó?Interceptor trong JSF
Trả lời
Bạn có thể triển khai PhaseListener
cho việc này. Bạn có thể lập trình để nghe trên specific JSF phase mà bạn chỉ định trong phương thức getPhaseId()
đã ghi đè. Bạn có thể chặn các sự kiện pha trước và sau bằng các phương thức beforePhase()
và afterPhase()
.
Ví dụ dưới đây lắng nghe trên các giai đoạn phản ứng render:
public class RequestInterceptor implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
@Override
public void beforePhase(PhaseEvent event) {
// Do your job here which should run before the render response phase.
}
@Override
public void afterPhase(PhaseEvent event) {
// Do your job here which should run after the render response phase.
}
}
Để làm cho nó chạy, bạn cần đăng ký nó như là một <phase-listener>
trong phần <life-cycle>
của tập tin faces-config.xml
. Bạn có thể có nhiều số <phase-listener>
s.
<lifecycle>
<phase-listener>com.example.RequestInterceptor</phase-listener>
</lifecycle>
Bạn có thể chỉ định PhaseId.ANY_PHASE
trong getPhaseId()
để cho người nghe giai đoạn chạy trên mọi giai đoạn JSF duy nhất (lưu ý rằng không nhất thiết phải tất cả trong số họ sẽ luôn luôn được thực thi, điều đó phụ thuộc vào loại yêu cầu). Bạn có thể nếu cần thiết nhận được ID giai đoạn hiện tại trong các phương pháp pha trước và sau bởi PhaseEvent#getPhaseId()
.
public class PhaseDebugger implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
@Override
public void beforePhase(PhaseEvent event) {
System.out.println("Before phase " + event.getPhaseId());
}
@Override
public void afterPhase(PhaseEvent event) {
System.out.println("After phase " + event.getPhaseId());
}
}
Ngoài ra, một Filter
nên làm việc tốt như nhau nếu bạn muốn một cái móc toàn cầu hơn (và do đó bạn không phải là chính xác quan tâm đến yêu cầu JSF/câu trả lời và bạn không cần bất cứ điều gì từ FacesContext
).
@WebFilter("/*")
public class RequestInterceptor implements Filter {
@Override
public void init(FilterConfig config) {
// Initialize global variables if necessary.
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
// Do your job here which should run before the request processing.
chain.doFilter(request, response);
// Do your job here which should run after the request processing.
}
@Override
public void destroy() {
// Cleanup global variables if necessary.
}
}
- 1. NHibernate Interceptor - Nó là gì
- 2. Spring MVC 3.2 @ResponseBody interceptor
- 3. Mùa xuân: Chuẩn Logging aspect (interceptor)
- 4. interceptor mùa xuân mvc: truy cập vào ResponseEntity trong postHandle
- 5. Nhiều actionlisteners trong JSF
- 6. Valuechangelistener Doubt trong JSF
- 7. Lấy JSF Converter cho lớp trong ManagedBean (JSF 1.2)
- 8. Castle Windsor - Phát hành Interceptor với lối sống thoáng qua
- 9. Xác định dịch vụ/phương pháp đích từ CXF Interceptor
- 10. Hibernate 4.0.0Final đâu là SessionFactory.openSession (Interceptor đánh chặn)
- 11. Id động trong JSF/Seam
- 12. Biến EL trong JSF ResourceBundle
- 13. Phạm vi trong JSF 2
- 14. viewExpiredException JSF
- 15. Hibernate: Event Listener hoặc Interceptor, những ưu điểm/nhược điểm trong thực tế là gì?
- 16. Spring mvc 3: Làm thế nào để có được biến đường trong một interceptor?
- 17. JSF convertDateTime với múi giờ trong DataTable
- 18. Lưu trữ ID xem trong JSF
- 19. Lặp lại trên HashMap.values () trong JSF + Facelets
- 20. Có một lớp "hằng số" trong JSF
- 21. Email liên kết xác nhận trong JSF
- 22. Kiểu có điều kiện trong JSF
- 23. JSF 2.1 ValueExpression trong thuộc tính action
- 24. Bảo mật cơ bản trong JSF
- 25. Lưu dữ liệu vào phiên trong JSF
- 26. Format ngày đầu ra trong JSF
- 27. <h:messages> làm gì trong JSF?
- 28. Phạm vi trong Trình xác thực JSF
- 29. Chuyển hướng có điều kiện trong JSF
- 30. Chuỗi chứa phương pháp trong jsf
Không có khả năng là ánh xạ một đối một. Hãy xem [PhaseListeners] (http://docs.oracle.com/javaee/6/api/javax/faces/event/PhaseListener.html). – McDowell