読者です 読者をやめる 読者になる 読者になる

PrimeFaces Extensions 3.0.0 AnalogClock と Knob は テーマを指定していないとダメ

PrimeFaces Extensions 3.0.0の新しいコンポーネント - Challenge Java EE !
を見て 3.0.0 が出てるのを知りました。
で試してみましたが AnalogClock と Knob は テーマを指定しないとエラーが出て正しく動きません。

説明は AnalogClock で行いますが、Knob でも同様です。

core/AnalogClock.java at master · primefaces-extensions/core · GitHub

private String getDefaultColorTheme() { 
    ELContext elContext = getFacesContext().getELContext(); 
    ValueExpression defaultThemeVE = getFacesContext().getApplication().getExpressionFactory().createValueExpression(elContext, RequestContext.getCurrentInstance().getApplicationContext().getConfig().getTheme(), String.class); 
    String defaultTheme = (String) defaultThemeVE.getValue(elContext); 
    return defaultTheme; 
}

ここの ValueExpression 取ってるとこがテーマを指定しないと、こんな感じになり

ValueExpression defaultThemeVE = 
  getFacesContext().getApplication().getExpressionFactory()
    .createValueExpression(elContext, null, String.class);

最終的に javax.el.ELException: Expression cannot be null が出ます。

これを回避するにはテーマを指定すると回避出来ます。
PrimeFaces
web.xml の context-param でテーマを指定すると大丈夫です。

  <context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>aristo</param-value>
  </context-param>

で、テーマを指定しなくても回避したいなーという場合は、

private String getDefaultColorTheme() { 
    ELContext elContext = getFacesContext().getELContext(); 
    ValueExpression defaultThemeVE = getFacesContext()
        .getApplication().getExpressionFactory().createValueExpression(
            elContext, 
            RequestContext.getCurrentInstance()
                .getApplicationContext().getConfig().getTheme(),
            String.class
        ); 
    String defaultTheme = (String) defaultThemeVE.getValue(elContext); 
    return defaultTheme; 
}

private String getDefaultColorTheme() { 
    ELContext elContext = getFacesContext().getELContext(); 
    ValueExpression defaultThemeVE = getFacesContext()
        .getApplication().getExpressionFactory().createValueExpression(
            elContext, 
            Optional.ofNullable(RequestContext.getCurrentInstance()
                .getApplicationContext().getConfig().getTheme()
            ).orElse("aristo"),
            String.class
        ); 
    String defaultTheme = (String) defaultThemeVE.getValue(elContext); 
    return defaultTheme; 
}

こんな感じに書き換えるとテーマを指定しなくても動くはずです。
デフォルトのテーマ名の取り方を調べてないのでベタで書いてますが、そこさえ調べればパッチ投げれそうな感じですね。