#目的
JSFを使っているが、ManagedBeanをJava側から取得したい。
👤 「普通にインスタンス生成すりゃええんじゃ?」
じゃなくて ManagedBeanとして取得したいんじゃ!
というときの解決法
#解決
とりあえず以下にBeanの例を書きます。
中身はそれっぽく適当に書いています。
HogeBean.java
/* ↑省略 */
@Named("hoge")
@ManagedBean
@ViewScope
class HogeBean implements Serializable {
private static final long serialVersionUID = 1L;
private String fuga;
@PostConstruct
public void init() {
fuga = "アイス";
}
public String getFuga() {
return fuga;
}
}
で、取得する方法の例はこちら。
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
HogeBean bean = (HogeBean) elContext.getELResolver().getValue(elContext, null, "hoge");
##例
都合により、ManagedBeanを経由してManagedBeanを取得してテキスト出力すると仮定
BeanBean.java
/* ↑省略 */
@Named("beeen")
@ManagedBean
@ViewScope
class BeanBean implements Serializable {
private static final long serialVersionUID = 1L;
public String getHogeBean() {
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
HogeBean bean = (HogeBean) elContext.getELResolver().getValue(elContext, null, "hoge");
}
}
view.xhtml
<!-- 省略 -->
<h:outputText value="#{beeen.hogeBean.fuga}"/>
出力結果: アイス
#おわりに
Beanの振り分けを行うBean(用途として適切かは別として...)とかには使えそうですが、
多用するようになると設計を見直したほうがいいですね。