Вы не можете отключить всю форму сразу. Вам действительно нужно отключить каждый из элементов ввода. Есть два основных способа добиться этого.
Первый способ - использовать Javascript для отправки формы на сервер при нажатии флажка, чтобы можно было использовать атрибут disabled
компонента JSF для отключения элементов. Вот базовый пример:
<h:form>
<h:selectBooleanCheckbox value="#{bean.freeze}" onclick="submit()" />
<h:inputText value="#{bean.value1}" disabled="#{bean.freeze}" />
<h:inputText value="#{bean.value2}" disabled="#{bean.freeze}" />
<h:inputText value="#{bean.value3}" disabled="#{bean.freeze}" />
</h:form>
Здесь #{bean.freeze}
должно указывать на свойство boolean
.
Второй способ - написать для этого функцию Javascript. Это не требует отправки формы и избавляет вас от одного цикла HTTP-запроса-ответа, который удобнее для пользователя.
<h:form>
<h:selectBooleanCheckbox onclick="disableForm(this)" />
<h:inputText value="#{bean.value1}" />
<h:inputText value="#{bean.value2}" />
<h:inputText value="#{bean.value3}" />
</h:form>
Функция JS disableForm()
в основном проста. Просто установите флажок в качестве аргумента функции с помощью this
, чтобы вы могли получить родительскую форму с помощью checkboxElement.form
, а затем получить все элементы формы с помощью form.elements
. Вам нужно только убедиться, что вы не отключили сам флажок, чтобы снова включить форму:)
function disableForm(checkboxElement) {
var elements = checkboxElement.form.elements;
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if (element != checkboxElement) {
element.disabled = checkbox.checked;
}
}
}
Не нужно заранее знать идентификатор, и это делает код JS универсальным и может использоваться повторно.
Надеюсь, это поможет.