Java 怎么查找从clazz类型的基本组件开始的JSF组件列表

2019年8月14日22:07:31 评论 28

1.简介

Java 怎么查找从clazz类型的基本组件开始的JSF组件列表?——请看下文。

2.代码

/**
 * 版权所有 编程十万个怎么办(www.tah1986.com)
 */

import javax.faces.component.UIComponent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main{
    
     
    public static <S extends UIComponent> List<S> findComponentsByClassName(
            UIComponent baseComponent, final Class<S> clazz) {
        final List<S> results = new ArrayList<>();
        recurseChildren(baseComponent, 0, new UIComponentVisitor() {
            @Override
            public boolean visit(UIComponent component, int depth) {
                if (clazz.getName().equals(component.getClass().getName())) {
                    results.add((S) component);
                }

                return true;
            }
        });

        return results;
    }
    
    public static boolean recurseChildren(UIComponent baseComponent,
            int depth, UIComponentVisitor visitor) {
        if (visitor.visit(baseComponent, depth) == false) {
            
            return false;
        }

        if (baseComponent.getFacetsAndChildren() != null) {

            Iterator<UIComponent> childComponentIterator = baseComponent
                    .getFacetsAndChildren();
            while (childComponentIterator.hasNext()) {
                UIComponent childComponent = childComponentIterator.next();
                if (recurseChildren(childComponent, depth + 1, visitor) == false) {
                    
                    return false;
                }
            }
        }

        
        return true;
    }
}

 

3.总结

示例代码演示了 Java 怎么查找从clazz类型的基本组件开始的JSF组件列表,具体步骤参见示例代码。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: