獲取bean類我有複合材料部件:從複合材料部件
<my:component value="#{bean.property1.property2}/>
從複合材料部件,我需要得到類bean.property1
讀取其註解。 我做到這一點通過下面的代碼:
ValueExpression valueExpression = expressionFactory.createValueExpression(FacesContext.getCurrentInstance().getELContext(),
"#{bean.property1}", Object.class);
Object bean = valueExpression.getValue(FacesContext.getCurrentInstance().getELContext());
Class<?> beanClass = bean.getClass();
這種運作良好,但如果我通過ui:param
使用my:component
從facelet裏,並通過bean
作爲參數,這並不工作,因爲bean
不能得到解決。
也許我應該使用FaceletContext
作爲ELContext
而不是FacesContext.getCurrentInstance().getELContext()
:
FaceletContext faceletElContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes()
.get("javax.faces.FACELET_CONTEXT");
但這並不對RENDER_RESPONSE
階段工作(從encodeBegin
法)。它返回最後使用的ELContext而不是實際的上下文(我並不感到驚訝:))。
目標是從my:component
獲得#{bean.property1}
的等級。我該怎麼做?
JSF自己的'ValueExpressionAnalayzer'是一個包私有類,因此不幸公開可用。爲此,OmniFaces還有一個'org.omnifaces.el.ExpressionInspector'。它甚至支持從EL表達式中提取方法參數(在a.o.''中使用)。 –
BalusC
@BalusC你是對包私人。我編輯了我的答案。我應該看看OmniFaces。它與RichFaces相處嗎? –
幾個OmniFaces工件已經用RF 4.5進行測試。至少,它應該像PrimeFaces一樣並排運行。 OmniFaces滿足於與任何JSF組件庫兼容。如果您發現與最新RF版本有任何兼容性問題,請通過任何方式報告[問題](https://github.com/omnifaces/omnifaces/issues)。 – BalusC