Estou tentando entender como funciona o pickList do PrimeFaces, mas até agora sem sucesso. Até tentei montar um Converter padrão para o tratamento que é ignorado.
Xhtml:
<p:pickList id="tencargos" 
	styleClass="form-control"
	value="#{tverbaBean.listTencargos}"
	var="listTencargos"
	converter="primeFacesPickListConverter"
	itemLabel="#{listTencargos.iEncargo}"
	itemValue="#{listTencargos}"
	showSourceControls="true" showTargetControls="true">
	<f:facet name="sourceCaption">Encargos Incidentes</f:facet>
	<f:facet name="targetCaption">Encargos Cadastrados</f:facet>
</p:pickList> 								
Converter:
@FacesConverter(value = "primeFacesPickListConverter") 
public class PrimeFacesPickListConverter implements Converter { 
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) { 
	Object ret = null; 
	if (arg1 instanceof PickList) { 
		Object dualList = ((PickList) arg1).getValue(); 
		DualListModel dl = (DualListModel) dualList; 
		for (Iterator iterator = dl.getSource().iterator(); iterator 
				.hasNext();) { 
			Object o = iterator.next(); 
			String id = (new StringBuilder()).append( 
					((AbstractBean) o).getId()).toString(); 
			if (arg2.equals(id)) { 
				ret = o; 
				break; 
			} 
		} 
		if (ret == null) { 
			for (Iterator iterator1 = dl.getTarget().iterator(); iterator1 
					.hasNext();) { 
				Object o = iterator1.next(); 
				String id = (new StringBuilder()).append( 
						((AbstractBean) o).getId()).toString(); 
				if (arg2.equals(id)) { 
					ret = o; 
					break; 
				} 
			} 
		} 
	} 
	return ret; 
} 
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) { 
	String str = ""; 
	if (arg2 instanceof AbstractBean) 
		str = ((AbstractBean) arg2).getId().toString(); 
	return str; 
} 
} 
MB:
public DualListModel<Tencargos> getListTencargos() {
	// ENCARGOS INCIDENTES
	TencargosRN tencargosRN = new TencargosRN();
	
	String verifica = "N";
	encargosListaCarga = tencargosRN.listar();
	if (tverbas.getListTencargos() != null)
		encargosIncididos = this.tverbas.getListTencargos();
	for (Tencargos item : encargosListaCarga) {
		for (Tencargos incidido : encargosIncididos) {
			if (item.equals(incidido)) {
				verifica = "S";
				break;
			} else {
				verifica = "N";
			}
		}
		if (verifica.equals("N")) {
			encargosLista.add(item);
		}
	}
	listTencargos = new DualListModel<Tencargos>(encargosIncididos, encargosLista);
	return listTencargos;
}
Método Salvar:
public String salvar() {
	this.tverbas.setIdverba(tverbas.getIdverba());
	List<Tencargos> listaBanco = new ArrayList<Tencargos>();
	listaBanco = (List<Tencargos>) listTencargos.getSource();
	this.tverbas.setListTencargos(listaBanco);
	
	TverbasRN tverbasRN = new TverbasRN();
	tverbasRN.salvar(tverbas);
	return "listaVerbas";
}
Quando eu uso o converter explicitando na tag do picklist converter="primeFacesPickListConverter" ele não carrega nem o Source nem o target
Quando eu retiro, ele me dá simplesmente uma referência em memória:
E eu não consigo pega isso e jogar numa lista de objetos para que eu possa salvar no banco. Ele carrega perfeitamente em tela, esse não é o problema. O ponto é quando eu aciono o método salvar, no momento que preciso recuperar as listas.
Alguém sabe como funciona?

