删除p:selectOneMenu中的按钮

时间:2014-12-23 20:05:50

标签: jsf primefaces selectonemenu

好吧,我想用PrimeFaces做这样的事情,但我不知道如何与我的<f:selectItems>并排放置一个按钮来删除该项目。

Selectonemenu with a remove button in every selectitems

<p:selectOneMenu id="pesquisaSalva"
                 rendered="#{!mapaEleitoralControl.desabiliarRadioPesquisaSalva}"
                 disabled="#{mapaEleitoralControl.desabiliarRadioPesquisaSalva}"
                 value="#{mapaEleitoralControl.parametrosPesquisaSalva}"
                 var="teste">

    <f:selectItem itemLabel="Selecione a pesquisa salva"
                  itemValue=""
                  noSelectionOption="true" />

    <f:selectItems value="#{mapaEleitoralControl.listaPesquisaSalvasMapaEleitoral}"
                   var="pesquisaSalvaME"
                   itemValue="#{pesquisaSalvaME.anoEleicao}"
                   itemLabel="#{pesquisaSalvaME.anoEleicao}"/>

    <p:column>
        #{teste}
    </p:column>

    <p:column>
        <p:commandButton id="iconOnly" icon="ui-icon-trash" title="Icon Only" />
    </p:column>

    <p:ajax event="change"
            update="mapaEleitoralForm"
            global="false"
            listener="#{mapaEleitoralControl.selectPesquisaSalvaGerarMapa}" />
</p:selectOneMenu>

1 个答案:

答案 0 :(得分:0)

我必须解决同样的问题。我这样做了(可能有更好的方法)。

    <p:selectOneMenu styleClass="bookMarkMenu" id="bookmarkMenu" value="#{bean.bookmark}" var="bookmark" style="width:150px;" converter="#{entityConverter}" panelStyle="width:300px;">
                            <f:selectItem itemLabel="#{messages['bookmark.select']}" itemVaule=""/>
                            <f:selectItems value="#{bean.bookmarks}" var="b" itemLabel="#{b.description}" itemValue="#{b}"/>
                            <p:column style="width:100px;">
                                <h:outputText style="padding-left:8px;" value="#{bookmark.description}" rendered="#{bookmark ne null}"/>
                            </p:column>
<p:column style="width:15px; padding:0px;">
                            <p:commandLink style="padding: 4px 10px 4px 10px;"  onclick="deleteCalled(event,#{bookmark.bookmarkId});"><i class="fa fa-trash-o" aria-hidden="true"></i></p:commandLink>
                        </p:column>

                        <p:ajax event="itemSelect" listener="#{bean.onBookmarkSelect}"/>
                    </p:selectOneMenu>

在其中一个p:列中添加p:commandLink(或按钮)的问题是仍然会调用项目选择的侦听器。这就是为什么我调用javascript方法deleteCalled onclick。

<p:remoteCommand name="deleteBookmark" action="#{bean.deleteBookmark()}" update="#{p:component('bookmarkDec')}"/>

    <script>
        function deleteCalled(event,id){
            event.stopPropagation();
            if(confirm('Do you really want to delete the bookmark?')){
                deleteBookmark([{name:'bookmarkId',value: id}]);
            }
            return false;
        }

    </script>

在该javascript方法中,您需要停止事件传播,然后调用p:remoteCommand。在这种情况下,我已经传递了书签的ID(我在列表中的项目)。

希望有所帮助。