我寫了一個facelet和一個相應的支持bean,用於實現用戶管理(添加,刪除等)。如何讀取從支持bean傳遞給facelet的參數
I'd want to be able to perform some custom processing when, for instance, a new user is added.
有一個「創建」按鈕,在facelet裏,它的點擊事件是由它的後臺bean處理。在事件處理程序結束時,我希望能夠調用另一個後臺bean的方法,這是未知的,因爲最理想的情況是facelet可以在多個頁面中使用,並具有不同的自定義處理。
我想通過提供給的facelet輔助bean名稱和方法名,這樣來實現此功能:
<myfacelet:subaccounts
backingBean="myBackingBean"
createListener="createListener" />
,並在事件處理程序調用#{} myBackingBean.createListener好歹結束。
我用這個方法(有一些重載一起)獲得MethodExpression的:
protected MethodExpression getMethodExpression(String beanName, String methodName, Class<?> expectedReturnType, Class<?>[] expectedParamTypes)
{
ExpressionFactory expressionFactory;
MethodExpression method;
ELContext elContext;
String el;
el = String.format("#{%s['%s']}", beanName, methodName);
expressionFactory = getApplication().getExpressionFactory();
elContext = getFacesContext().getELContext();
method = expressionFactory.createMethodExpression(elContext, el, expectedReturnType, expectedParamTypes);
return method;
}
和Click事件處理程序應該是這樣的:
public void saveSubaccountListener(ActionEvent event)
{
MethodExpression method;
...
method = getMethodExpression(
"backingBean",
"createSubaccountListener",
SubuserBean.class);
if (method != null)
method.invoke(
getFacesContext().getELContext(),
new Object[] { _editedSubuser });
}
認爲只要工作正常我提供了一個現有的bean名稱(myBackingBean),但是如果使用backingBean,invoke()不起作用,因爲有以下錯誤:
javax.el.PropertyNotFoundException: Target Unreachable,
identifier 'backingBean' resolved to null
有沒有一種方法可以從facelet backing bean中檢索已傳遞給facelet的參數的值?在我的例子中,backingBean的值應該是myBackingBean?
我搜索了並嘗試了不同的解決方案,但沒有運氣。
這似乎並沒有解決我的問題。我已經可以從facelet jsf代碼訪問backing bean,但不能從facelet backing bean訪問。 順便說一句我試過你的代碼,輸出文本工作正常,但是當我嘗試使用MethodExpression.invoke()它不 - 相同的錯誤 – Antonio 2010-03-15 17:14:10