Возможно ли сделать это в JSF? - PullRequest
1 голос
/ 26 июня 2010

У меня есть / группа переключателей и CommandButton

Два случая

1) Когда нажата одна из кнопок + Нажата команда Button, я должен отобразить некоторые другиераздел (скажем, DIV) и выполнение останавливается.означает, что командная кнопка не должна отправлять форму на сервер

1) Когда нажата НЕТ кнопки + Нажата командная кнопка, я должен отправить форму на сервер иотобразить сообщение лица, что он ничего не выбрал.

Я не хочу делать это предупреждение как всплывающее окно JavaScript. Приветствуются предложения.

1 Ответ

2 голосов
/ 26 июня 2010

Да, это возможно с небольшой помощью 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!"));
}
...