Да, это возможно с небольшой помощью JavaScript.Проще всего было бы указать идентификатор элементов div секции в качестве значения переключателя, а затем выполнить цикл по всем переключателям и показать / скрыть элемент в зависимости от состояния кнопки checked
.В конце вы должны разрешить функции JS возвращать false
, когда любая кнопка отмечена, чтобы не вызывать действие кнопки по умолчанию и форму не будет отправлена на сервер.
Вот пример запуска:
<h:form id="form">
<h:selectOneRadio id="radio">
<f:selectItem itemValue="section1" itemLabel="Show section1" />
<f:selectItem itemValue="section2" itemLabel="Show section2" />
<f:selectItem itemValue="section3" itemLabel="Show section3" />
</h:selectOneRadio>
<h:commandButton id="button" value="show section"
action="#{bean.submit}" onclick="return showSection(this.form)" />
<h:messages />
</h:form>
<h:panelGroup layout="block" id="section1" class="section">section1</h:panelGroup>
<h:panelGroup layout="block" id="section2" class="section">section2</h:panelGroup>
<h:panelGroup layout="block" id="section3" class="section">section3</h:panelGroup>
с этим CSS
.section {
display: none;
}
и этим JS
function showSection(form) {
var radiobuttons = form['form:radio'];
var selected = false;
for (var i = 0; i < radiobuttons.length; i++) {
var radiobutton = radiobuttons[i];
var section = document.getElementById(radiobutton.value);
if (radiobutton.checked) {
section.style.display = 'block';
selected = true;
} else {
section.style.display = 'none';
}
}
return !selected; // Submits to server if none is selected.
}
и JSF-компонентом (мы изконечно, предположим, что это действие будет только , если не выбрано ни одного).
public void submit() {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Please select!"));
}