为什么当我将我的类调用到 javabean 中时,java 反射不起作用?



我试图用java反射显示我的所有包名称,当我用主方法测试时,它可以完美地工作

whitch获取所有包名称的方法在一个名为test1.java: 的类中

 public Set<String> findAllPackages(String packagebase) {
    List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
    classLoadersList.add(ClasspathHelper.contextClassLoader());
    classLoadersList.add(ClasspathHelper.staticClassLoader());
    Reflections reflections = new Reflections(
            new ConfigurationBuilder()
                    .setScanners(new SubTypesScanner(false),
                            new ResourcesScanner())
                    .setUrls(
                            ClasspathHelper.forClassLoader(classLoadersList
                                    .toArray(new ClassLoader[0])))
                    .filterInputsBy(
                            new FilterBuilder().include(FilterBuilder
                                    .prefix(packagebase))));
    Set<Class<? extends Object>> classes = reflections
            .getSubTypesOf(Object.class);
    Set<String> packageNameSet = new TreeSet<String>();
    for (Class classInstance : classes) {
        packageNameSet.add(classInstance.getPackage().getName());
    }
    return packageNameSet;
}

我在同一类中的主要方法:

    public static void main(String[] args) throws ClassNotFoundException,
        IOException {
    for (String pack : new test1().findAllPackages("org.basepackage")) {
        System.out.println(pack);
    }
}

当我试图将我的方法放入managedbean或只是将test1.java类安装到menagedbean时,它也不起作用,当我调试时,我发现它没有进入findAllPackages的循环。

我的bean看起来像:

 @Named
@ViewScoped
public class mymanagedbean implements Serializable {
private List<SelectItem> packageNameItems;
 @PostConstruct
public void init() {        
    try {
        packageNameItems=new ArrayList<SelectItem>();
        packageNameItems=(new test1().loadpackageName("org.basepackage"));
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我有getters&中管理的packageNameItems的setter

我的jsf看起来像:

 <h:form>
                <h:selectOneMenu value="#{mymanagedbean.packageName}">
                    <f:selectItems value="#{mymanagedbean.classNameItems}"/>
                </h:selectOneMenu>
            </h:form>

你知道吗?

我解决了问题:

public Set<String> findAllPackages(String packagebase) {
List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());
Reflections reflections = new Reflections(
        new ConfigurationBuilder()
                .setScanners(new SubTypesScanner(false),
                        new ResourcesScanner())
                .setUrls(
                        ClasspathHelper.forClassLoader(classLoadersList)))
                .filterInputsBy(
                        new FilterBuilder().include(FilterBuilder
                                .prefix(packagebase))));
Set<Class<? extends Object>> classes = reflections
        .getSubTypesOf(Object.class);
Set<String> packageNameSet = new TreeSet<String>();
for (Class classInstance : classes) {
    packageNameSet.add(classInstance.getPackage().getName());
}
return packageNameSet;}

相关内容