我尝试像这样修复不可管理的代码:
<a4j:commandButton action="dia_ok" actionListener="#{...}" ajaxSingle="true" .../>
我通过将按钮绑定到ManagedBean并将所有属性交换为Java-Code来修复它,所以我只有:
<a4j:commandButton binding="#{...}"/>
我成功地编码了setAjaxSingle(true)和actionListener-attribute,但是我在编码action-Attribute上失败了。
我的问题是:我怎么能指定的结果,其中方法button.setActionExpression()只允许methodexexpression的参数,而不是字符串?
您可以创建一个值为"dia_ok"
,返回类型为String
的MethodExpression
。这个表达式不一定是指"#{bean.action}"
或其他东西。
。
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
,等等,然后与此约定保持一致。