以编程方式添加<f:actionlistener type =“ListenerClass”> </f:actionlistener>

时间:2014-02-11 16:32:52

标签: jsf java-ee sap

在我的JSF-Page中,我有一个带有浏览按钮的输入字段(其部分为&lt;%@ taglib prefix =“sap”uri =“http://java.sap.com/jsf/html/extended “%&gt;”

<sap:commandInputText>
   <f:attribute name="upperCase" value="false" />
   <f:actionListener type="PackageAndNameOfAClass"/>
</sap:commandInputText>

现在我想以编程方式创建这样的UI-Component。

这不是问题。但我不知道如何handel

UICommandInputText inputField.setActionListener想要一个Method-Expression

UICommandInputText inputField.addActionListener想要一个Action-Listener

但我只有类的名称,并将它放在这个“type-Attribute”

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我在所有MB扩展的Generic managedBean中使用此方法。 (或者你也可以在 Util 类中使它静止)

public MethodExpression createAction(String actionExpression, Class<?> returnType) {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getApplication().getExpressionFactory()
        .createMethodExpression(context.getELContext(), actionExpression, returnType, new Class[0]);
}

public MethodExpressionActionListener createActionListener(String actionListenerExpression) {
    FacesContext context = FacesContext.getCurrentInstance();
    return new MethodExpressionActionListener(context.getApplication().getExpressionFactory()
        .createMethodExpression(context.getELContext(), actionListenerExpression, null, new Class[] {ActionEvent.class}));
}

你这样称呼它:

htmlCommandButton.addActionListener(this.createActionListener("#{questionarioMB.enviarFormulario}"));

一个包含有用的JSF方法的网站:

http://www.javacodegeeks.com/2012/04/5-useful-methods-jsf-developers-should.html