小编Dan*_*ici的帖子

Field.get(obj)返回注入的CDI托管bean上的所有null,而手动调用getter则返回正确的值

我正在尝试通过反射从JSF页面的后备bean访问某些字段的值。问题是,当我使用getter时,我会得到正确的值,但是当我使用必要字段的get(obj)方法时,我总是会返回空值。

获取beanObject:

ELContext elcontext = FacesContext.getCurrentInstance().getELContext();
Object beanObject = FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elcontext, null, beanName);
Run Code Online (Sandbox Code Playgroud)

要在不使用getter的情况下获取字段值,请执行以下操作:

List<Field> fields = new ArrayList<Field>();
ParamsBuilder.getAllFields(fields, beanClass);

for(Field field: fields) {

    field.setAccessible(true);
    System.out.println(field.getName() + ": " + field.get(beanObject)); //just to see if it works

}
Run Code Online (Sandbox Code Playgroud)

getAllFields方法具有以下实现:

public static List<Field> getAllFields(List<Field> fields, Class<?> type) {
    for (Field field: type.getDeclaredFields()) {
        fields.add(field);
    }

    if (type.getSuperclass() != null) {
        fields = getAllFields(fields, type.getSuperclass());
    }

    return fields;
}
Run Code Online (Sandbox Code Playgroud)

要使用getter获取值,请执行以下操作:

private ClassX getValue(Object beanObject, Class<?> beanClass) throws Exception {

    Method getter = …
Run Code Online (Sandbox Code Playgroud)

java reflection jsf cdi managed-bean

4
推荐指数
1
解决办法
1903
查看次数

标签 统计

cdi ×1

java ×1

jsf ×1

managed-bean ×1

reflection ×1