我在这里遇到了一个奇怪的情况..
首先,我从我的bean中获取此方法:
List<temp> t;
for (temp t : tempList) {
if ((Branch b = branchMap.get(t.getBranchID)) != null) {
if ((user u = b.getUsers.get((t.getFirstName() + t.getLastName()) != null) {
user.getPhonse.add(new Phone(t.getPhoneType(), t.getPhoneNumber()))
}
} else {
List<Phone> phonse = new ArrayList<Phone>();
phonse.add(new Phone(t.getPhoneType(), t.getPhoneNumber()));
Map<String,String> users = new hashMap<String,String>();
users.put(t.getFirstName() + t.getLastName(), new user(t.getFirstName(), t.getLastName(), phones);
branchMap.put(t.getBranchID, new Branch(t.getBranchID(), new hashMap<String,String>().put(t.getFirstName() + t.getLastName(), new user(t.getFrstName(), t.getLastName(), new List<Phone>))))))
}
}
在我的backbean:
#{segurancaBean.callSubAcaoMethod(subAcao, moduloBean.class.name, modulo.id)}
所以,我传递方法名称(subAcao),bean类和ID
这里我得到了我的方法:
public void callSubAcaoMethod(Acao acao, String bean, Long id){
try {
Class<?> clazz = Class.forName(bean);
Method method = clazz.getMethod(acao.getTipoAcao().getNmBean(), Long.class);
Object obj = clazz.newInstance();
Object ins = new Object();
ins = method.invoke(obj, id);
} catch (ClassNotFoundException | SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException ex) {
Logger.getLogger(SegurancaBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
如果我只打印一条消息,它可以工作,但是如果我尝试使用DAO来查找对象,我会在这一行中得到InvocationTargetException:
@Override
public void btnAlterar(Long id){
Modulo m = new Modulo();
m = moduloServico.pesquisar(id);
抱歉英语不好
详细地说,我在视图中添加了一个直接调用方法的按钮(没有动态)。它工作正常。 :/
这是完整的堆栈跟踪
ins = method.invoke(obj, id);
答案 0 :(得分:1)
由于您使用Class.newInstance()
来实例化该类,因此不会发生注释(范围和生命周期管理)的CDI处理。因此,您希望注入的任何内容都不会被注入,而是保持初始化为null
。