JSF, EL, Managed Beans — как узнать, что такое сигнатуры геттера и сеттера?

С JSF, управляемыми компонентами и EL 2.2 я обычно знаю, что выражение формы:

#{bean.value}

будет отображаться на соответствующий набор функций в классе управляемого компонента следующим образом:

@ManagedBean
class Bean {
    private String value;
    public String getValue() { return value; }
    public void setValue( String s ) { value = s; }
}

Это также можно получить и установить свойства карты:

#{bean.value['key']}

Поддерживается чем-то вроде:

@ManagedBean
class Bean {
    private Map<String, Boolean> kvMap;
    public boolean getValue( String key ) { return kvMap.get( key ); }
    public void setValue( String key, boolean value ) { kvMap.put( key, value ); }
}

Пока все хорошо.

По мере того, как я провожу больше времени с JSF, я обнаружил, что пытаюсь писать повторно используемые фрагменты кода. В частности, небольшие блоки xhtml в блоках , которые я могу включить через . Более того, многие из наиболее полезных для меня вещей — это такие вещи, как вложенные наборы флажков (наш UI-дизайнер просто без ума от них ;-), и здесь становится очень удобно.

Всегда, чтобы использовать и без безбожного набора текста, я использовал псевдонимы, либо созданные с помощью или встроенный с чем-то вроде varатрибута .

Поскольку я пишу все больше и больше вложенных UIComponents, особенно тех, которые получают свои значения из карт внутри карт, мне становится все труднее и труднее вывести правильную сигнатуру метода установки, которую JSF будет искать при отправке формы. (по какой-то причине писать геттеры кажется более естественным).

Тогда мой вопрос к вам, гуру:

Есть ли какой-нибудь способ заставить JSF сказать мне, как, по его мнению, должна выглядеть сигнатура установщика? Поскольку JSF обычно не жалуется на выражение, которое разрешается только в геттер (думая, что это свойство только для чтения), я нахожу отсутствие обратной связи разочаровывающим, и, похоже, требуется много возиться с различными сигнатурами методов, прежде чем я наконец попал в эту магическую правильную.

Я надеюсь, что есть какой-то метод, скажем, запрос FacesContext... во время выполнения или поиск в каком-то скомпилированном промежуточном продукте, таком как файл класса, который укажет мне правильную сигнатуру установщика для глубоко вложенного свойства. Я думаю, что если бы такая вещь существовала, это сэкономило бы мне много времени, пытаясь понять, как создать сеттер методом проб и ошибок.

Надеюсь, я достаточно ясно сформулировал, что мне нужно, заранее спасибо за ваши ответы.

7
задан par 15 May 2012 в 06:30
поделиться