我有一个动态呈现的 JSF 页面——所有组件都由支持 bean 创建并添加到网格中。我有一个命令按钮,我创建了一个 MethodExpression 来设置单击按钮时要调用的方法。但是单击该按钮会导致异常“java.lang.IllegalArgumentException:参数数量错误”和“javax.faces.FacesException:参数数量错误”。
创建按钮的代码是
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,它找不到“...DynamicComponentTest@1db3b45.addBtn1_action(javax.faces.event.ActionEvent)”
有没有人成功解决了这个问题?我已经尝试将 null 和 String.class 作为 createMethodExpression 中返回值的类型,但这无助于解决它。