gpt4 book ai didi

Java反射不修改我的@Named bean变量

转载 作者:行者123 更新时间:2023-12-01 05:47:02 24 4
gpt4 key购买 nike

我知道不应该使用反射,但这是一个临时解决方案,直到......

我有1:

@Named("PoiBean")
@SessionScoped
public class PoiBean implements ActionContext, Serializable {
private String name = "www";

@EJB
private NavigationServiceRemote nav;

@PostConstruct
private void testReflection() {
try {
nav.TestMe(this);
} catch (NoSuchMethodException ex) {
Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex);
}
}

public void prepareListAllForm() {
this.setName("test me");
}
}

我有2个:

@Stateless(mappedName="NavigationService")
public class NavigationServiceBean implements NavigationServiceRemote, NavigationContext {
@Override
public void TestMe(ActionContext ctx) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

Method method = ctx.getClass().getMethod("prepareListAllForm", new Class[] {});
method.invoke(ctx, new Object[] {});
}

说明:当 PoiBean 启动时,注入(inject) EJB nav,之后在 @PostConstruct 中调用测试方法 TestMe。

当我调试时,在Test me name=www之前,在PoiBean::prepareListAllForm(通过反射调用)中,name变量被修改为=“test me”,返回后名称返回到www。

就像反射在 PoiBean 的副本上调用prepareListAllForm ...

我现在想要实现的是使用prepareListAllForm函数修改该变量,该函数使用@EJB的反射进行调用。

最佳答案

NavigationServiceRemote 是否注释为@Remote? EJB 接口(interface)的远程调用将编码/解码参数和返回值,因此 TestMe 方法将收到 PoiBean 的副本。如果要修改实例,您将需要使用本地 EJB。

关于Java反射不修改我的@Named bean变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com