Выбор значений selectManyMenu внутри композита

Я создал композит, который содержит PrimeFaces selectManyMenu, Я пытаюсь передать связанное значение выбора в композит, но это не удается.

Составной код:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:composite="http://java.sun.com/jsf/composite"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:kf="http://java.sun.com/jsf/composite/kf"
      xmlns:c="http://java.sun.com/jsp/jstl/core">

<composite:interface>
    <composite:attribute name="selectedUsers" required="true"/>
    <composite:attribute name="users" required="true" type="java.util.List"/>
    <composite:attribute name="recommendActionHandler" required="true" method-signature="void listener()"/>
    <composite:attribute name="recommendButtonStyle"/>
    <composite:clientBehavior name="click" event="change" targets="recommendUsers" default="true"/>
</composite:interface>

<composite:implementation>
    <div id="#{cc.clientId}">
        <h:form id="recommendForm" prependId="false">
            <p:growl id="recommendGrowl" showDetail="true"/> 
            <p:commandButton id="recommendBtn" value="Recommend" type="button" update=":recommendForm,recommendUsers" style="#{cc.attrs.recommendButtonStyle}"/>
            <p:overlayPanel id="recommendPanel" for="recommendBtn" widgetVar="recommendPanel"
                    dynamic="true"
                    hideEffect="fade" 
                    showCloseIcon="true">
                <p:selectManyMenu id="recommendUsers" value="#{cc.attrs.selectedUsers}" showCheckbox="true"
                        style="width:150px;height:200px">
                    <f:selectItems value="#{cc.attrs.users}" var="user" itemLabel="#{user.login}" itemValue="#{user.login}"/>
                </p:selectManyMenu>
                <p:commandButton id="submitRecommendations"
                        value="Send"
                        update="recommendUsers recommendGrowl"
                        actionListener="#{cc.attrs.recommendActionHandler}"
                        process="recommendUsers @this"
                        />
            </p:overlayPanel>
        </h:form>
    </div>
</composite:implementation>
</html>

Посмотреть код:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:kf="http://java.sun.com/jsf/composite/kf"
    >

    <ui:composition template="/WEB-INF/facelet_templates/default.xhtml">
        <ui:define name="content">
            <kf:recommend id="recommendIt" 
                selectedUsers="#{recommendViewBean.selectedUsers}"
                users="#{recommendViewBean.users}"
                recommendActionHandler="#{recommendController.saveRecommendations()}"
                />
        </ui:define>
    </ui:composition>


</html>

Просмотреть код бина:

public class RecommendViewBean {


    private List<UserType> users = new ArrayList<UserType>();
    private List<String> selectedUsers = new ArrayList<String>();

    //setters and getters...
}

В приведенном выше коде значение selectedUsers это значение в вопросе. Я передаю значение List компонента вида / поддержки, которое содержит выборки для selectManyMenu"s value приписывать. Это прекрасно работает, когда вне композита или если я передаю bean-компонент вида вот так...

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:kf="http://java.sun.com/jsf/composite/kf"
    >

    <ui:composition template="/WEB-INF/facelet_templates/default.xhtml">
        <ui:define name="content">
            <kf:recommend id="recommendIt" 
                selectedUsers="#{recommendViewBean}"
                users="#{recommendViewBean.users}"
                recommendActionHandler="#{recommendController.saveRecommendations()}"
                />
        </ui:define>
    </ui:composition>


</html>

...

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:composite="http://java.sun.com/jsf/composite"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:kf="http://java.sun.com/jsf/composite/kf"
      xmlns:c="http://java.sun.com/jsp/jstl/core">

<composite:interface>
    <composite:attribute name="selectedUsers" required="true"/>
    <composite:attribute name="users" required="true" type="java.util.List"/>
    <composite:attribute name="recommendActionHandler" required="true" method-signature="void listener()"/>
    <composite:attribute name="recommendButtonStyle"/>
    <composite:clientBehavior name="click" event="change" targets="recommendUsers" default="true"/>
</composite:interface>

    <composite:implementation>
        <div id="#{cc.clientId}">
            <h:form id="recommendForm" prependId="false">
                <p:growl id="recommendGrowl" showDetail="true"/> 
                <p:commandButton id="recommendBtn" value="Recommend" type="button" update=":recommendForm,recommendUsers" style="#{cc.attrs.recommendButtonStyle}"/>
                <p:overlayPanel id="recommendPanel" for="recommendBtn" widgetVar="recommendPanel"
                        dynamic="true"
                        hideEffect="fade" 
                        showCloseIcon="true">
                    <p:selectManyMenu id="recommendUsers" value="#{cc.attrs.selectedUsers.selectedUsers}" showCheckbox="true"
                            style="width:150px;height:200px">
                        <f:selectItems value="#{cc.attrs.users}" var="user" itemLabel="#{user.login}" itemValue="#{user.login}"/>
                    </p:selectManyMenu>
                    <p:commandButton id="submitRecommendations"
                            value="Send"
                            update="recommendUsers recommendGrowl"
                            actionListener="#{cc.attrs.recommendActionHandler}"
                            process="recommendUsers @this"
                            />
                </p:overlayPanel>
            </h:form>
        </div>
    </composite:implementation>
    </html>

Итак, мой вопрос заключается в том, как бы я передать соответствующее значение для selectManyMenu"s value приписать в композит?

Спасибо. Дайте мне знать, если мне нужно объяснить больше.

0 ответов

Другие вопросы по тегам