我尝试修复这样的无法管理的代码:
<a4j:commandButton action="dia_ok" actionListener="#{...}" ajaxSingle="true" .../>
我通过将按钮绑定到ManagedBean并将所有属性交换为Java代码来修复它,所以生病只有:
<a4j:commandButton binding="#{...}"/>
我成功编写了setAjaxSingle(true)和actionListener属性,但我在代码上失败了action-Attribute。
我的问题是:如何指定action-outcome,方法button.setActionExpression()只允许使用MethodExpression的参数而不是String?
答案 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
等,然后与此约定保持一致。