在Primefaces picklist中,如何使用Omnifaces Converter找到从TARGET移动到SOU



我找了很多地方都找不到解决办法。

我在PrimefacesPickList分量中使用Omnifaces listConverter。当我将项目从SOURCE移动到TARGET时。在后台bean中,我只在dualList.getTarget()上获取新项目。

然而,当我移动一个项目从目标。在后台bean中,我无法检查是否已从TARGET中删除了一个项目。

I try dualList.getSource() - SOURCE不包含从TARGET删除的项目/s当然, duallist . gettget ()将为空(假设没有项从SOURCE移动到TARGET)。

我的问题是我如何才能发现一些东西已经从TARGET移动到SOURCE中的支持bean?

以前我已经创建了一个自定义转换器,在其中,我的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,那么整个事情就会反过来工作。

最好使用ajax transfer事件实现此目标,如PrimeFaces用户指南中所述。

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查找dualList的值并更新targetsource

说明:根据您输入的List值,您将获得target (List=".getSource")source (List=".getTarget")中添加的新值。

因此,通过将ListmyBean.dualList.getSource更改为myBean.completeList,我得到更新的targetsource (即旧值+新值添加+旧值删除)

如果用户只关心targetsource中增加的新值,而不关心任何值被删除,那么他应该分别使用myBean.dualList.getSourcemyBean.dualList.getTarget

然而,如果用户想知道最终的内容,因为它是在我的情况下,使用整个集合,即myBean.completeList

简而言之,你在<o:conveter>标签中传递的List是重要的。

希望对你有帮助!

相关内容

  • 没有找到相关文章

最新更新