我有一個動態呈現的JSF頁面 - 所有組件都由支持bean創建並添加到網格中。我有一個命令按鈕,我創建了一個MethodExpression來設置單擊該按鈕時要調用的方法。但單擊此按鈕會導致異常「java.lang.IllegalArgumentException:參數數量錯誤」和「javax.faces.FacesException:參數數量錯誤」。MethodExpression IllegalArgumentException:參數數量錯誤
創建按鈕上的代碼是
HtmlCommandButton addBtn1 = (HtmlCommandButton) FacesContext.getCurrentInstance().
getApplication().createComponent(HtmlCommandButton.COMPONENT_TYPE);
addBtn1.setId("addBtn1");
addBtn1.setValue("Add Row");
String addBtn1Action = "#{dynamicComponentTest.addBtn1_action}";
Class[] args = new Class[]{ActionEvent.class};
MethodExpression addBtn1ME = FacesContext.getCurrentInstance().getApplication().
getExpressionFactory().createMethodExpression(
FacesContext.getCurrentInstance().getELContext(), addBtn1Action, null, args);
addBtn1.setActionExpression(addBtn1ME);
mainGrid.getChildren().add(addBtn1);
則動作方法的簽名是
public String addBtn1_action(ActionEvent event)
當我運行我的測試應用,然後點擊按鈕,我得到的例外。不過,如果我更改了簽名
public String addBtn1_action(ActionEvent[] event)
我得到一個MethodNotFoundException它找不到「...... [email protected]_action(javax.faces.event.ActionEvent)」
有沒有人成功解決了這個問題?我已經嘗試了null和String.class作爲createMethodExpression中返回值的類型,並沒有幫助解決它。