Кодирование JSF, навигация-действие commandButton по коду - PullRequest
1 голос
/ 28 августа 2011

Я пытаюсь исправить неуправляемый код следующим образом:

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

Я исправляю это, привязывая кнопку к ManagedBean и меняя все атрибуты Java-кода, поэтому у меня есть только:

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

Я успешно закодировал setAjaxSingle (true) и атрибут actionListener, но мне не удалось написать код атрибута действия.

Мой вопрос: как я могу указать результат действия, когда метод button.setActionExpression () допускает только аргумент MethodExpression вместо String?

1 Ответ

1 голос
/ 28 августа 2011

Вы можете просто создать MethodExpression со значением "dia_ok" и типом возврата String. Выражение не обязательно относится к "#{bean.action}" или чему-то еще.

1007 * Е.Г. *

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 и т. Д., А затем соблюдайте это соглашение.

...