次のenum
が与えられます。
public enum Constants
{
PAGE_LINKS(10);
//Other constants as and when required.
private final int value;
private Constants(int value){
this.value = value;
}
public int getValue(){
value;
}
}
このenum
は、アプリケーションスコープのBeanの下に配置されます。
@ManagedBean
@ApplicationScoped
public final class ConstantsBean
{
private Constants constants;
public ConstantsBean() {}
public Constants getConstants() {
return constants;
}
}
ELでPAGE_LINKS
の値にアクセスするにはどうすればよいですか?
<p:dataGrid pageLinks="#{}".../>
#{}
には何を書くべきですか?出来ますか?
編集:
次の方法でBeanを変更します。
@ManagedBean
@ApplicationScoped
public final class ConstantsBean
{
public ConstantsBean() {}
public int getValue(Constants constants) {
return constants.getValue();
}
}
そして、そのようにELでアクセスします。
<p:dataGrid pageLinks="#{constantsBean.getValue('PAGE_LINKS')}".../>
どういうわけか動作しますが、私はこの醜い方法を信じていません。
これは、 コメント Sazzadurによって、
#{constantsBean.constants.value}
動作するはずです。列挙型には、そのvalue
プロパティ用の適切なパブリックゲッターがあります。ただし、マネージドBeanのconstants
プロパティを目的の列挙値に設定していることも確認する必要があります。つまり、これまでに投稿されたコードスニペットではそれを行わなかったため、null
のままです。 ELは、(ベース)プロパティがnull
の場合、設計上何も出力しません。
設定方法は次のとおりです。
@ManagedBean
@ApplicationScoped
public final class ConstantsBean {
private Constants constants = Constants.PAGE_LINKS;
public Constants getConstants() {
return constants;
}
}
ただし、自己文書化を向上させるために、プロパティ(およびゲッター)の名前をpageLinks
に変更します。
#{constantsBean.pageLinks.value}
別の方法は、 OmniFaces <o:importConstants>
、質問の履歴に基づいて、OmniFacesに既に精通しており、おそらく現在のプロジェクトでもすでに使用しています。
<o:importConstants type="com.example.Constants" />
...
#{Constants.PAGE_LINKS.value}
このように、アプリケーションスコープのBeanでThingをラップする必要はありません。
Primefaces 6.0以降、PrimeFaces importEnum
を使用することもできます(以前はインポートは「PrimefacesExtensions」で行われました)。
https://www.primefaces.org/showcase/ui/misc/importEnum.xhtml