编码JSF,commandButton的导航动作 - 结果由Code

时间:2011-08-28 10:44:41

标签: jsf facelets ajax4jsf

我尝试修复这样的无法管理的代码:

<a4j:commandButton action="dia_ok" actionListener="#{...}" ajaxSingle="true" .../>

我通过将按钮绑定到ManagedBean并将所有属性交换为Java代码来修复它,所以生病只有:

<a4j:commandButton binding="#{...}"/>

我成功编写了setAjaxSingle(true)和actionListener属性,但我在代码上失败了action-Attribute。

我的问题是:如何指定action-outcome,方法button.setActionExpression()只允许使用MethodExpression的参数而不是String?

1 个答案:

答案 0 :(得分:1)

您只需创建MethodExpression,其值为"dia_ok",返回类型为String。表达式不一定是指"#{bean.action}"或其他东西。

E.g。

button.setActionExpression(createMethodExpression("dia_ok", String.class));

private static MethodExpression createMethodExpression(String expression, Class<?> returnType) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    return facesContext.getApplication().getExpressionFactory().createMethodExpression(
        facesContext.getELContext(), expression, returnType, new Class[0]);
}

我只是没有看到它如何使代码更易于管理,因为你正在以这种方式将视图混合到模型中。也许您需要编写一些常规约定如何对属性进行排序/组织,以便更好地进行管理?例如。首先id,然后是value等,然后与此约定保持一致。