0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Java側からManagedBeanを取得する[JSF]

Last updated at Posted at 2019-12-18

#目的
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(用途として適切かは別として...)とかには使えそうですが、
多用するようになると設計を見直したほうがいいですね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?