このネストされた EL 式を処理するために、ネストされたjsf-expression-stringsの質問からExtendedBeanELResolverを適応させることが可能かどうかを知りたいです。
#{controllerBean.getBean('userProfileBean', component).street}*
これにより、 controllerBean.getBeanは Bean userProfileBeanを返します。ExtenedBeanELResolver次の例外を取得します。
SCHWERWIEGEND: javax.el.PropertyNotFoundException: /WEB-INF/templates/modification/userProfile.xhtml @35,196 value="#{controllerBean.getBean('userProfileBean', component).street}": Property 'getBean' not found on type com.something.ControllerBean
追加のブラケットを挿入すると機能しますが、今よりもさらに見栄えが悪くなります。
#{(controllerBean.getBean('userProfileBean', component)).street}*
追加のブラケットなしで行うことは可能ですか?
CycDemoの回答後のUPDATE 1:
奇妙な問題。私が入れたら
<h:inputText value="#{beanOne.getBean('data').title}" />
フォーム内でページがレンダリングされますが、フォームを送信するまでのみです。その後、同じエラーが表示されます。
WARNUNG: /WEB-INF/templates/home.xhtml @61,66 value="#{beanOne.getBean('data').title}": Property 'getBean' not found on type com.something.BeanOne
に変更すると
<p:inputText value="#{beanOne.getBean('data').title}" />
ページは最初はレンダリングされません。問題は、フォームが送信されたときに JSF がセッターを呼び出そうとしていますが、正しく評価できないことだと思います。
何か案は?
更新 2
どうやら JSF はgetGetBean()を呼び出そうとしているようです。これは、間違っているBeanOneのプロパティを探しているためです(Eclipse にブレークポイントがありました)。
@ManagedBean
@ViewScoped
public class BeanOne {
private Object bean = new String("something");
public Object getBean(String name) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().evaluateExpressionGet(context,
"#{" + name + "}",
Object.class);
}
public Object getGetBean() {
return bean; // <-- will be called by JSF
}
public void setGetBean(Object bean) {
this.bean = bean;
}
}