Я думаю, что ответ BalusC - лучший из возможных ответов.Это показывает одну из многих небольших причин, почему JSF 2.0 является таким большим улучшением по сравнению с 1.x.
Если вы используете 1.x, вы можете попробовать функцию EL, которая помещает идентификатор компонента вобласть запроса под некоторым именем, которую может получить ваш метод бина.
Например,
<h:inputText id="foo" size="#{my:getWithID(configBean.size, 'foo')}" />
Реализация метода EL может выглядеть примерно так:
public static Object getWithID(String valueTarget, id) {
FacesContext context = FacesContext.getCurrentInstance();
ELContext elContext = context.getELContext();
context.getExternalContext().getRequestMap().put("callerID", id);
ValueExpression valueExpression = context.getApplication()
.getExpressionFactory()
.createValueExpression(elContext, "#{"+valueTarget+"}", Object.class);
return valueExpression.getValue(elContext);
}
Вв этом случае всякий раз, когда вызывается метод getSize () bean-компонента config, идентификатор вызывающего компонента будет доступен через "callerID" в области запроса.Чтобы сделать его немного лучше, вам, возможно, следует добавить блок finally, чтобы удалить переменную из области видимости после выполнения вызова.(обратите внимание, что я не пробовал приведенный выше код, но, надеюсь, он демонстрирует идею)
Опять же, это будет последним средством, когда вы используете JSF 1.x.Самое чистое решение - использование JSF 2.0 и метод BalusC.