Как я могу проверить, если несколько флажков отмечены с JSF / AjaxBehaviorEvent - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть несколько флажков - им присваивается один и тот же идентификатор "choosen" в коде представления x html.

Я добавил для них Ajax прослушиватель событий, например:

<ui:repeat var="posts"
        value="#{postBacking.postsOverview.posts}">
<h:selectBooleanCheckbox id="choosen"
    styleClass="check-margin"
    value="#{posts.choosen}" rendered="#{posts.declined =='No'}">
    <f:ajax listener="#{postsBacking.isPostsChosen}" event="click" render="@form" execute="@form"/>
</h:selectBooleanCheckbox>
</ui:repeat>

В методе listener в моем backingBean я хотел бы проверить, установлены ли какие-либо из этих флажков, а затем установить кнопку отключенной, если флажки не отмечены, и включить, если установлена ​​одна или несколько.

Но как мне получить значения всех флажков - могу ли я использовать объект AjaxBehaviorEvent для этого или есть какой-то другой способ?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

При обработке прослушивателя событий ajax значения флажков должны обычно применяться к вашей модели данных, где вы можете посмотреть состояние выбора пользователя. В зависимости от этого состояния просто переключите логическое свойство bean-компонента, которое отключает командную кнопку:

@Named
@ViewScoped
public class MyBean implements Serializable {
    private List<Post> posts;

    private boolean buttonDisabled = true;

    public void ajaxEventListener(BehaviorEvent e) {
        boolean anythingChosen = false;
        for (Post post : posts) {
            if (post.isChosen() && "No".equals(post.getDeclined())) {
                anythingChosen = true;
                break;
            }
        }

        // or alternatively using the stream api:
        // anythingChosen = posts.stream().filter(Post::isChosen).map(Post::getDeclined)
        //     .anyMatch("No"::equals);

        setButtonDisabled(!anythingChosen);
    }
    // getters, setters ...
}

При использовании следующей формы командная кнопка отключается, если не установлен флажок:

<h:form>
    <ui:repeat var="post" value="#{myBean.posts}">
        <h:selectBooleanCheckbox value="#{post.chosen}">
            <f:ajax event="click" listener="#{myBean.ajaxEventListener}" render="@form" execute="@form"/>
        </h:selectBooleanCheckbox>
    </ui:repeat>

    <h:commandButton action="#{myBean.doSomething()}" value="doSomething"
        disabled="#{myBean.buttonDisabled}" />
</h:form>
0 голосов
/ 27 февраля 2020

Вы можете использовать valueChangeListener вместо атрибутов listener и event. valueChangeListener будет срабатывать каждый раз, когда вы устанавливаете / снимаете флажок.

Чтобы получить значения при вызове valueChangeListener, вы можете l oop через postBacking.postsOverview.posts чтобы увидеть, проверяется ли какое-либо значение.

Не забудьте обновить кнопку на <f:ajax render="@form btnId"/>, чтобы включить / отключить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...