2

我仍在研究 primefaces 组件 p:orderlist。我设法实现了拖放行为(将另一个列表中的项目放入 p:orderlist),并且我还使 p:commandButton 在 p:orderlist 中工作。

现在我有一个新问题。您可以将项目拖放到 p:order 列表中,以赋予它们新的顺序。(也就是说,为什么该组件被称为 orderlist,与购物订单无关 ;-) )。

但是,如果我重新排序我的项目,我不会收到任何通知或事件,它告诉我的 bean,有些东西发生了变化。

有人知道如何使这成为可能吗?

这是我的 p:orderlist,看起来很熟悉:

 <h:panelGroup>

           <p:remoteCommand name="removeTechniker" actionListener="#{systemlandschaftRessourceHandler.removeTechnikerByRemoteCommand}"
                     out="technikersTable" update="@form"/>

           <p:orderList id="technikersTable"
                        value="#{systemlandschaftRessourceHandler.entity.technikers}" 
                        var="_techniker"  
                        itemValue="#{_techniker}" 
                        converter="#{entityConverter}"
                        controlsLocation="none">  

                <f:facet name="caption">Techniker</f:facet>  

                <p:column>    
                    <p:commandButton id="deleteTechnikerFromListButton" 
                                    styleClass="colButton" 
                                    icon="ui-icon-trash" 
                                    type="button" 
                                    onclick="removeTechniker([{name:'id', value:'#{_techniker.id}'}]);"
                                    update="@form"/>
                </p:column>
                <p:column style="width:75%;" id="outTech">  
                   <p:outputLabel value="#{_techniker.verantwortlich.displayName}"/>
                </p:column>

            </p:orderList>

            <p:droppable id="technikerDrop" 
                        for="technikersTable" 
                        tolerance="touch" 
                        activeStyleClass="ui-state-highlight" 
                        datasource=":systemLandschaftTabView:sysObjektDetailPanelForm:userTable" 
                        scope="userDraggable">  
                    <p:ajax listener="#{systemlandschaftRessourceHandler.onDropTechniker}" update="@form" />  
            </p:droppable>  
            </h:panelGroup>

我已经在 primefaces 社区上找到了一些东西,但这不起作用,甚至无法说出原因。链接: http: //forum.primefaces.org/viewtopic.php?f=3 &t=26539

问候 LStrike

仅供参考,这是我解决的项目,关于 p:orderlist:

Primefaces:订单列表中的命令按钮不起作用

Primefaces:Orderlist:重新排序时索引超出范围异常

4

1 回答 1

0

自己想出了一个解决方案。这是某种黑客,但它的工作原理。我使用列表的设置器,我想对其进行排序并将其发送到数据库。为了阅读列表,我在 getter 上使用了 @OrderBy 注释。

@OrderBy("ranking ASC")
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name="MWEB_SYSLAND_RES_ENTWUSER_L", joinColumns = {@JoinColumn(name = "ID_SYSLAND_RES", nullable = false, updatable = false)} ,inverseJoinColumns = { @JoinColumn(name ="ID_SYSLAND_USER", nullable = false, updatable = false) })
    public List<SystemlandschaftUser> getEntwicklers() {
        return entwicklers;
    }

    public void setEntwicklers(List<SystemlandschaftUser> entwicklers) {
        this.entwicklers = sortSysUserList(entwicklers);

@Transient
    private List<SystemlandschaftUser> sortSysUserList(List<SystemlandschaftUser> input){
        if(input != null && input.size() > 0){
            for(int i=1, size=input.size(); i <= size; i++){
                SystemlandschaftUser t = input.get(i-1);
                t.setRanking(i);
            }
        }
        return input;
    }
于 2013-10-21T14:14:34.587 回答