以编程方式创建h:commandButton不调用onclick =“processInput(id)”

时间:2013-04-01 05:04:30

标签: jsf

以下是我以编程方式创建<h:commandButton>

的方法
private HtmlCommandButton generateButton(String id,String label){
  HtmlCommandButton button = (HtmlCommandButton)app.createComponent
      (HtmlCommandButton.COMPONENT_TYPE);
  button.setId(id);
  button.setValue(label);
  button.setOnclick("processInput(id)");
  return button;
}

单击该按钮时,我需要执行processInput(id)功能。但是,当我点击该按钮时,没有任何反应。

1 个答案:

答案 0 :(得分:1)

Onclick函数会将processInput添加为JavaScript函数。您需要在Java方法中传递id,如

setOnClick("processInput(" + id + ")");

要添加操作方法,您需要使用setActionExpression

HtmlCommandButton button = new HtmlCommandButton();
FacesContext fc = FacesContext.getCurrentInstance();
ELContext ctx = fc.getELContext();
String expression = "#{processInput('id')}";
Class[] parameterTypes = new Class[1];
parameterTypes[0]=String.class;
MethodExpression me = fc.getApplication().getExpressionFactory().
                      createMethodExpression(ctx, 
                      expression, returnType, parameterTypes);
button.setActionExpression(me);
button.setOnclick("alert('');");