Как обычно, все амортизация действительно описана в документации API, включая подробности о замене.
Чтобы получить четкий обзор, ниже представлены способы динамического создания Action и ActionListener до JSF 1.2 и после JSF 1.2:
Привязка создания действия в JSF 1.0 / 1.1:
MethodBinding action = FacesContext.getCurrentInstance().getApplication()
.createMethodBinding("#{bean.action}", new Class[0]);
uiCommandComponent.setAction(action);
Создать привязку ActionListener в JSF 1.0 / 1.1:
MethodBinding actionListener = FacesContext.getCurrentInstance().getApplication()
.createMethodBinding("#{bean.actionListener}", new Class[] {ActionEvent.class});
uiCommandComponent.setActionListener(actionListener);
Создать выражение действия в JSF 1.2 или новее:
FacesContext context = FacesContext.getCurrentInstance();
MethodExpression action = context.getApplication().getExpressionFactory()
.createMethodExpression(context.getELContext(), "#{bean.action}", String.class, new Class[0]);
uiCommandComponent.setActionExpression(action);
Создать выражение ActionListener в JSF 1.2 или новее:
FacesContext context = FacesContext.getCurrentInstance();
MethodExpression actionListener = context.getApplication().getExpressionFactory()
.createMethodExpression(context.getELContext(), "#{bean.actionListener}", null, new Class[] {ActionEvent.class});
uiCommandComponent.addActionListener(new MethodExpressionActionListener(actionListener));
Чтобы избежать большого количества стандартного кода, вы можете просто красиво обернуть его в вспомогательные методы (если необходимо в вспомогательном / служебном классе), например:
public static MethodExpression createAction(String actionExpression, Class<?> returnType) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getExpressionFactory()
.createMethodExpression(context.getELContext(), actionExpression, returnType, new Class[0]);
}
public static MethodExpressionActionListener createActionListener(String actionListenerExpression) {
FacesContext context = FacesContext.getCurrentInstance();
return new MethodExpressionActionListener(context.getApplication().getExpressionFactory()
.createMethodExpression(context.getELContext(), actionListenerExpression, null, new Class[] {ActionEvent.class}));
}
так что вы можете просто использовать его следующим образом:
uiCommandComponent.setActionExpression(createAction("#{bean.action}", String.class);
uiCommandComponent.addActionListener(createActionListener("#{bean.actionListener}");