编码 JSF,命令按钮的导航操作结果由代码



我尝试像这样修复不可管理的代码:

<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",返回类型为StringMethodExpression。这个表达式不一定是指"#{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,等等,然后与此约定保持一致。

相关内容

  • 没有找到相关文章

最新更新