Это действительно самый вменяемый подход.
Альтернативой, если вам действительно нужно, чтобы ваш компонент был в области запроса, является повторное определение состояния disabled
второго выпадающего списка в (post) конструкторе компонента на основе представленное значение первого выпадающего списка, которое вы можете найти в карте параметров запроса (или просто позволить JSF установить его на @ManagedProperty
). Вам нужно только вручную повторить преобразование / проверку JSF, если это необходимо.
Предположим, что второе раскрывающееся меню больше не следует отключать, когда переданное значение первого раскрывающегося списка равно строковому значению foo
и что идентификатор клиента первого раскрывающегося списка равен form:dropdown1
:
public Bean() {
this.dropdown2disabled = !"foo".equals(FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap().get("form:dropdown1"));
}
Но, как вы узнали, боб с областью видимости легче.
В качестве еще одной альтернативы, вы можете использовать Tomahawk's <t:saveState>
для хранения одного свойства непосредственно в состоянии просмотра. Добавьте это куда-нибудь к представлению:
<t:saveState value="#{bean.dropdown2disabled}" />
Это приведет к меньшему размеру состояния просмотра, чем при использовании bean-объекта с областью видимости.