Я имею / группа переключателей и CommandButton
Два случая
1) Когда одна из кнопки нажата +, кнопка нажата, я должен отобразиться, некоторый другой раздел (скажите что DIV), и остановки выполнения. средства, Кнопка не должна отправлять форму серверу
1) Когда НИ ОДНА из кнопки не нажата +, кнопка нажата, я должен отправить форму серверу и отобразить сообщение Поверхностей, что он ничего не выбрал.
Я не хочу делать это предупреждение, поскольку JavaScript раскрывается. Предложения приветствуются.
Да, это возможно с небольшой помощью JavaScript. Проще всего было бы передать ID элементов 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 bean (мы, конечно, предполагаем, что это действие будет только вызываться, если не выбран ни один).
public void submit() {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Please select!"));
}