package org.jboss.seam.faces; import static org.jboss.seam.ScopeType.STATELESS; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.util.AbstractMap; import java.util.Map; import java.util.Set; import javax.faces.component.UIComponent; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Unwrap; import org.jboss.seam.annotations.intercept.BypassInterceptors; /** * Access to UIComponents in the current view, by id. * * @author Gavin King * */ @Name("org.jboss.seam.faces.uiComponent") @BypassInterceptors @Scope(STATELESS) @Install(precedence=BUILT_IN, classDependencies="javax.faces.context.FacesContext") public class UiComponent { @Unwrap public Map<String, UIComponent> getViewComponents() { return new AbstractMap<String, UIComponent>() { @Override public boolean containsKey(Object key) { return get(key) != null; } @Override public Set<Map.Entry<String, UIComponent>> entrySet() { throw new UnsupportedOperationException(); } @Override public UIComponent get(Object key) { if ( !(key instanceof String) ) return null; try { FacesContext context = FacesContext.getCurrentInstance(); if (context == null) { return null; } UIViewRoot viewRoot = context.getViewRoot(); if (viewRoot == null) { return null; } return viewRoot.findComponent( (String) key ); } catch (IllegalArgumentException iae) { return null; } } }; } }