Rich Pick list com colunas

Olá pessoal,

Estou tentando configurar um Pick list com colunas na minha aplicação, mas não estou tendo sucesso.

Da forma padrão, utilizando somente o f:selectItems funciona, porém, eu não tenho como seprar as informações em colunas.

Peguei um exemplo nesse link http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=pickList&skin=blueSky
porém, está dando esse erro:

Tentei esse outro site, mas também não deu certo:
http://uaihebert.com/?p=35

Acredito que o problema todo seja o converter.

Alguém já utilizou um converter com um rich:pickList ou h:selectOneMenu? Teriam um exemplo de como fazer isso funcionar?

Desde já agradeço!

Esse outro site ouvi falar por aí que é muito bom! :lol:

Coloca seu código aí. Vamos analisar. Como que vc fez seu converter?

Fiz “igual” ao seu exemplo.

Classe: User

public class User {     
	
	public User(){     
		
	}     
	
	public User(String userName, String email){        
		this.userName = userName;        
		this.email = email;    
	}     
	
	private String userName;    
	private String email;     
	
	public String getUserName() {        
		return userName;    
	}     
	
	public void setUserName(String userName) {        
		this.userName = userName;    
	}     
	
	public String getEmail() {        
		return email;    
	}     
	
	public void setEmail(String email) {        
		this.email = email;    
	}     
	
	@Override    
	public String toString() {        
		return getUserName();    
	}
	
}

Classe: UserMB

public class UserMB {     
	private User user;    
	@SuppressWarnings("unchecked")
	private Map users;
	
	@SuppressWarnings("unchecked")
	public UserMB(){        
		users = new HashMap();        
		users.put("Name 01", new User("Name 01", "Email 01"));        
		users.put("Name 02", new User("Name 02", "Email 02"));        
		users.put("Name 03", new User("Name 03", "Email 03"));        
		users.put("Name 04", new User("Name 04", "Email 04"));        
		users.put("Name 05", new User("Name 05", "Email 05"));    
	}     
	
	public String showName(){        
		return "show.xhtml";    
	}     
	
	public Date getServerTime(){        
		return new Date();    
	}     
	
	public User getUser() {        
		return user;    
	}     
	
	public void setUser(User user) {        
		this.user = user;    
	}     
	
	@SuppressWarnings("unchecked")
	public List getUsers() {        
		return new ArrayList(users.values());    
	}     
	
	public User getUserByName(String userName){        
		return (User) users.get(userName);    
	}
	
}

Classe: UserConverter

public class UserConverter implements Converter {     
	@Override    
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String key) {        
		FacesContext context = FacesContext.getCurrentInstance();        
		UserMB userMB = (UserMB) context.getELContext().getELResolver().getValue(context.getELContext(), null, "userMB");         
		return userMB.getUserByName(key);    
	}     
	
	@Override    
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {        
		return arg2.toString();    
	}

}

Código no JSF:

	<h:selectOneMenu value="#{userMB.user}">                 
		<f:selectItems value="#{userMB.users}"/>
		<f:converter converterId="userConverter"/>
	</h:selectOneMenu>

Faces config:

 <converter>
  <converter-id>userConverter</converter-id>
  <converter-class>com.UserConverter</converter-class>
 </converter>

Continua dando esse erro:

Argument Error: An option for component j_id289 was not an instance of javax.faces.model.SelectItem. Type found: java.util.ArrayList.

jakefrog,

Pelo que percebi, o problema é que na versão 1.2 do JSF, o f:selectItem não aceita um List como em seu exemplo.

Existe alguma outra forma de fazer funcionar?

Esse post mostra como criar um converter para JSF 1.2: http://infocomputacao.blogspot.com/2009/04/criando-convertconversores-no-jsf.html

ou aqui: http://www.ibm.com/developerworks/library/j-jsf3/

cara fiquei uma noite brigando com um picklist do prime o meu converter ficou assim



import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import modelo.PalavraChave;
import org.primefaces.component.picklist.PickList;
import org.primefaces.model.DualListModel;

@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 (Object o : dl.getSource()) {
                String id = "" + ((PalavraChave) o).getCodigo();
                if (arg2.equals(id)) {
                    ret = o;
                    break;
                }
            }
            if (ret == null) {
                for (Object o : dl.getTarget()) {
                    String id = "" + ((PalavraChave) o).getCodigo();
                    if (arg2.equals(id)) {
                        ret = o;
                        break;
                    }
                }
            }
        }
        return ret;
    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
        String str = "";
        if (arg2 instanceof PalavraChave) {
            str = "" + ((PalavraChave) arg2).getCodigo();
        }
        return str;
    }
}

pena que tu esta usando o rich e JSF 1 e alguma coisa
se não eu poderia te mostrar como eu fiz
hehehe

[quote=apalmeira]Fiz “igual” ao seu exemplo.

Classe: User

public class User {     
	
	public User(){     
		
	}     
	
	public User(String userName, String email){        
		this.userName = userName;        
		this.email = email;    
	}     
	
	private String userName;    
	private String email;     
	
	public String getUserName() {        
		return userName;    
	}     
	
	public void setUserName(String userName) {        
		this.userName = userName;    
	}     
	
	public String getEmail() {        
		return email;    
	}     
	
	public void setEmail(String email) {        
		this.email = email;    
	}     
	
	@Override    
	public String toString() {        
		return getUserName();    
	}
	
}

Classe: UserMB

public class UserMB {     
	private User user;    
	@SuppressWarnings("unchecked")
	private Map users;
	
	@SuppressWarnings("unchecked")
	public UserMB(){        
		users = new HashMap();        
		users.put("Name 01", new User("Name 01", "Email 01"));        
		users.put("Name 02", new User("Name 02", "Email 02"));        
		users.put("Name 03", new User("Name 03", "Email 03"));        
		users.put("Name 04", new User("Name 04", "Email 04"));        
		users.put("Name 05", new User("Name 05", "Email 05"));    
	}     
	
	public String showName(){        
		return "show.xhtml";    
	}     
	
	public Date getServerTime(){        
		return new Date();    
	}     
	
	public User getUser() {        
		return user;    
	}     
	
	public void setUser(User user) {        
		this.user = user;    
	}     
	
	@SuppressWarnings("unchecked")
	public List getUsers() {        
		return new ArrayList(users.values());    
	}     
	
	public User getUserByName(String userName){        
		return (User) users.get(userName);    
	}
	
}

Classe: UserConverter

public class UserConverter implements Converter {     
	@Override    
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String key) {        
		FacesContext context = FacesContext.getCurrentInstance();        
		UserMB userMB = (UserMB) context.getELContext().getELResolver().getValue(context.getELContext(), null, "userMB");         
		return userMB.getUserByName(key);    
	}     
	
	@Override    
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {        
		return arg2.toString();    
	}

}

Código no JSF:

	<h:selectOneMenu value="#{userMB.user}">                 
		<f:selectItems value="#{userMB.users}"/>
		<f:converter converterId="userConverter"/>
	</h:selectOneMenu>

Faces config:

 <converter>
  <converter-id>userConverter</converter-id>
  <converter-class>com.UserConverter</converter-class>
 </converter>

Continua dando esse erro:

Argument Error: An option for component j_id289 was not an instance of javax.faces.model.SelectItem. Type found: java.util.ArrayList. [/quote]

Boa tarde, cara!

É necessário fazer alguma outra configuração no projeto?

Esse método sempre me retorna vazio (null).

private TributosParser getTributosParser(FacesContext facesContext) {
		if (tributosParser == null) {
			ELContext elContext = facesContext.getELContext();
			tributosParser = (TributosParser) elContext.getELResolver().getValue(elContext, null,
					"tributosParser");
		}
		return tributosParser;
	}