Olá, tudo bom? Estou fazendo um picklist e precisava deixar uma lista fixa de um lado (source) e na lista target ir adicionando sem retirar do source. Alguém poderia me dar uma luz?
controller
@PostConstruct
public void init() {
instance = new Playlist();
midiasSource = midiaBean.findAll();
midiasTarget = new ArrayList<Midia>();
midias = new DualListModel<Midia>(midiasSource, midiasTarget);
}
converter
@FacesConverter(value = “primeFacesPickListConverter”)
public class PrimeFacesPickListConverter implements Converter {
@Override
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;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
String str = "";
if (arg2 instanceof AbstractBean)
str = ((AbstractBean) arg2).getId().toString();
return str;
}
xhtml
<p:pickList id=“PojoPickList” value="#{playlistController.midias}" var=“midia” effect=“bounce” itemValue="#{midia}" required=“false"
requiredMessage=“Pelo menos 1 funcionário deve ser selecionado"
itemLabel=”#{midia.nmMidia}” showSourceControls=“false” showTargetControls=“true” showCheckbox=“true” responsive="true"
showSourceFilter=“true” showTargetFilter=“true” filterMatchMode=“contains” converter=“primeFacesPickListConverter”>
<f:facet name="sourceCaption">Midias Disponíveis</f:facet>
<f:facet name="targetCaption">Nova Playlist</f:facet>
<p:ajax event="transfer" listener="#{playlistController.onTransfer}" >
</p:pickList>
Da maneira que está, o picklist remove da source e coloca na target, ou seja, não consigo inserir 2x o mesmo item da source, alguma ideia?