PrimeFaces选取列表:源和目标列表未更新

PrimeFaces选取列表:源和目标列表未更新,primefaces,target,empty-list,picklist,Primefaces,Target,Empty List,Picklist,我正在设置primefaces选取列表,源列表和目标列表保持为空 page.xhtml <h:form> <p:pickList id="picklist" value="#{bean.users}" var="user" itemValue="#{user}" itemLabel="#{user.login}" converter="userConverter"> <f:facet name="sourceCaption"&

我正在设置primefaces选取列表,源列表和目标列表保持为空

page.xhtml

<h:form>
    <p:pickList id="picklist" value="#{bean.users}" var="user" 
        itemValue="#{user}" itemLabel="#{user.login}" converter="userConverter">  

    <f:facet name="sourceCaption">Source</f:facet>  
    <f:facet name="targetCaption">Target</f:facet>  

    <p:ajax event="transfer" listener="#{bean.onTransfer}" />    

    <p:column style="width:75%;">  
        <h:outputText value="#{user.login}" />  
    </p:column>  

    </p:pickList>

    <h:commandButton id="submit" type="submit" actionListener="#{bean.submit}" value="Submit" />
    <h:commandButton id="display" actionListener="#{bean.displayTargetList}" value="Display Target List" />
</form>
java

@ManagedBean(name = "bean")
@ViewScoped
public class Bean {

    private List<User> source;
    private List<User> target;
    private DualListModel<User> users;

    public void setTarget(List<User> list) {
        this.target = list;
    }

    public void setSource(List<User> list) {
        this.source = list;
    }

    public void setUsers(DualListModel<User> list) {
        this.users = list;
    }

    public DualListModel<User> getUsers() {
        return this.users;
    }

    public List<User> getSource() {
        return this.source;
    }

    public List<User> getTarget() {
        return this.target;
    }

    @PostConstruct
    public void init() {
        this.source = myController.getUsers(); // return all my users in database
        this.target = new ArrayList<User>();
        this.users = new DualListModel<User>(this.source, this.target);
    }

    public void submit() {

    }

    public void displayTargetList() {
        System.out.println("Entering function");
        Iterator<User> iterator = this.target.iterator();
        while(iterator.hasNext()) {
            User u = iterator.next();
            System.out.println(u.getLogin());
        }
    }

}
还有转换器

userConverter.java

@FacesConverter("userConverter")
public class UserConverter implements Converter{

    private List<User> users;

    public UserConverter(){
        this.users = MyController.getAllUsers();
    }

    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        return this.getUserById(value);
    }

    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return ((User) value).getId();
    }

    public User getUserById(String id) {
        // return the user searching from this.users
    }
}
我的代码有点复杂,但我希望错误就在这里。对我来说,它似乎像primefaces showcase一样实现。我可以补充一点,转换器中的getAsObject方法返回一个我在返回值之前试图打印的对象,并且该对象不是null

如果你能帮忙的话。
谢谢

问题在于源列表和目标列表没有直接更新。我需要使用users.getTarget和users.getSource来查看修改。