ejbを作成しました
@Stateless
@LocalBean
public class BasitBean {
public String helloBasit() {
return "Basit";
} //end of helloBasit()
} //end of class BasitBean
私はJSFからそれを次のように呼んでいます
<h:body>
<h:outputLabel value="#{helloBasit.callBasit()}" />
</h:body>
@ManagedBean
@SessionScoped
public class HelloBasit {
@EJB
private BasitBean basitBean;
/** Creates a new instance of HelloBasit */
public HelloBasit() {
}
public String callBasit() {
return basitBean.helloBasit();
} //end of callBasit()
} //end of class HelloBasit
このコードは正常に機能しています。しかし、私がこのようにコードを変更すると
<h:body>
<h:outputLabel value="#{helloBasit.label}" />
</h:body>
@ManagedBean
@SessionScoped
public class HelloBasit {
@EJB
private BasitBean basitBean;
String label;
/** Creates a new instance of HelloBasit */
public HelloBasit() {
System.out.println();
String label = basitBean.helloBasit();
System.out.println(label);
}
public BasitBean getBasitBean() {
return basitBean;
}
public void setBasitBean(BasitBean basitBean) {
this.basitBean = basitBean;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
} //end of class HelloBasit
それから私は例外を取得します
SEVERE: Error Rendering View[/index.xhtml]
com.sun.faces.mgbean.ManagedBeanCreationException: Cant instantiate class: pk.mazars.basitMahmood.HelloBasit.
at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)
......
なぜこの例外が発生するのですか?フローは、ページが検出されたときに#{helloBasit.label}
コンストラクターが呼び出され、インスタンス変数が初期化され、BeanインスタンスがbasitBeanに挿入され、次にbeanメソッドが呼び出されることを理解している必要があります。しかし、この場合、Beanインスタンスでnullが発生するのはなぜですか?以前のコードが機能しているのに機能していないのはなぜですか?コンストラクターからBeanを呼び出すにはどうすればよいですか?
ありがとうございました。