簡體   English   中英

在Primefaces選取列表中,如何使用Omnifaces Converter查找將項目從TARGET移至SOURCE

[英]In Primefaces picklist, how to find that an item is moved from TARGET to SOURCE, Using Omnifaces Converter

我環顧四周,找不到解決方案。

我使用Omnifaces listConverterPickList的組件Primefaces 當我將一個項目從SOURCE移到TARGET時 在支持bean中,我僅在dualList.getTarget()上獲得新項。

但是,當我將項目從TARGET移到SOURCE時 在支持bean中,我無法檢查是否已從TARGET中刪除了一個項目。

我嘗試了dualList.getSource() - SOURCE不包含從TARGET放下的項目,當然, dualList.getTarget()將為空(假設沒有項目從SOURCE移到TARGET)。

我的問題是我怎么能發現支持bean中的某些東西已從TARGET移到SOURCE

以前,我創建了一個自定義轉換器,在dualList.getTarget() ,我的dualList.getTarget()給了我更新后的目標(即舊值+添加的新值+刪除的舊值)。 因此,我可以弄清楚哪些值被添加,刪除並且仍然存在。

但是在使用Omnifaces listConverter我不了解如何實現它。

我的代碼如下所示:

XHTML

<p:pickList id="pickList" value="#{assignBenchmarkersBean.dualUserList}" 
            var="users" itemLabel="#{users.username}" itemValue="#{users}" >
    <o:converter converterId="omnifaces.ListConverter" 
                 list="#{assignBenchmarkersBean.dualUserList.source}" />
</p:pickList>

<p:commandButton id="update" value="#{bundle.create}" 
                 styleClass="redButton bigFont" 
                 actionListener="#{assignBenchmarkersBean.update()}" />

豆角,扁豆

public void update(){
        try{
            prepareRemoveOldAndAddNewUsersList();
           /**some other code **/
        }catch(Exception e){
            FacesMsg.error(ErrorMessage.UPDATE.getValue(), e);
        }
    }

    private void prepareRemoveOldAndAddNewUsersList() {
        for(User user : dualUserList.getTarget()){      //add users
            addUsers.add(user);
        }
        for(User user : dualUserList.getSource()){      //remove users
            if(oldUserList.contains(user)){
                removeUsers.add(user);
            }
        }
    }

用戶實體

@Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof User)) {
            return false;
        }
        User other = (User) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.abc.model.main.User[ id=" + id + " ]";
    }

注意:

如果在轉換器的list屬性中,我放置了bean.dualList.target ,那么整個事情bean.dualList.target的方式工作。

如《 PrimeFaces用戶指南》中所述,最好將ajax transfer事件用於此目標。

XHTML:

<p:pickList id="pickList" value="#{assignBenchmarkersBean.dualUserList}" 
        var="users" itemLabel="#{users.username}" itemValue="#{users}" >
    <o:converter converterId="omnifaces.ListConverter" 
             list="#{assignBenchmarkersBean.dualUserList.source}" />
    <p:ajax event="transfer" listener="#{pickListBean.handleTransfer}" />
</p:pickList>

豆角,扁豆:

public class PickListBean {
    //DualListModel code
    public void handleTransfer(TransferEvent event) {
        //event.getItems() : List of items transferred
        //event.isAdd() : Is transfer from source to target
        //event.isRemove() : Is transfer from target to source
    }
}

這就是我為我工作的方式。

在Omnifaces ListConverter的實現中, getAsObject方法使用list查找值並更新dualListtargetsource

注意 :您將獲得無論是在增加了新的價值target (List=".getSource")或增加了新的價值source (List=".getTarget")按照該List值已輸入。

因此,通過將ListmyBean.dualList.getSourcemyBean.completeList ,可以獲取更新的targetsource (即舊值+添加的新值+刪除的舊值)

如果用戶只關心添加到targetsource的新值,而不關心是否刪除了任何值, myBean.dualList.getTarget分別使用myBean.dualList.getSourcemyBean.dualList.getTarget

但是,如果用戶想了解最終的內容,請使用整個集合,即myBean.completeList

簡而言之,在<o:conveter>標記中傳遞的List很重要。

希望對您有所幫助!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM