|
| 1 | +package com.stackify.deepjsf; |
| 2 | + |
| 3 | +import javax.faces.bean.ManagedBean; |
| 4 | +import javax.faces.bean.RequestScoped; |
| 5 | +import javax.faces.component.UIComponent; |
| 6 | +import javax.faces.component.UIViewRoot; |
| 7 | +import javax.faces.component.visit.VisitContext; |
| 8 | +import javax.faces.component.visit.VisitResult; |
| 9 | +import javax.faces.event.PhaseEvent; |
| 10 | +import javax.faces.event.PhaseId; |
| 11 | +import javax.servlet.http.HttpServletRequest; |
| 12 | + |
| 13 | +@ManagedBean |
| 14 | +@RequestScoped |
| 15 | +public class PhaseListenerBean { |
| 16 | + |
| 17 | + public void beforeListener(PhaseEvent event) { |
| 18 | + if (!event.getPhaseId().equals(PhaseId.RENDER_RESPONSE)) { |
| 19 | + return; |
| 20 | + } |
| 21 | + UIViewRoot root = event.getFacesContext().getViewRoot(); |
| 22 | + |
| 23 | + boolean showNewFeature = showNewFeatureForIp(event); |
| 24 | + |
| 25 | + processComponentTree(root, event, showNewFeature); |
| 26 | + } |
| 27 | + |
| 28 | + private boolean showNewFeatureForIp(PhaseEvent event) { |
| 29 | + HttpServletRequest request = (HttpServletRequest) event.getFacesContext() |
| 30 | + .getExternalContext().getRequest(); |
| 31 | + String ip = request.getRemoteAddr(); |
| 32 | + return !ip.startsWith("127.0"); |
| 33 | + } |
| 34 | + |
| 35 | + private void processComponentTree(UIComponent component, PhaseEvent event, boolean show) { |
| 36 | + component.visitTree(VisitContext.createVisitContext(event.getFacesContext()), |
| 37 | + (context, target) -> { |
| 38 | + if (target.getId() != null |
| 39 | + && target.getId().startsWith("new-feature-") |
| 40 | + && !show) { |
| 41 | + target.setRendered(false); |
| 42 | + } |
| 43 | + return VisitResult.ACCEPT; |
| 44 | + }); |
| 45 | + } |
| 46 | + |
| 47 | +} |
0 commit comments