Hebert_Coelho
Esse outro site ouvi falar por aí que é muito bom! :lol:
Coloca seu código aí. Vamos analisar. Como que vc fez seu converter?
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.
apalmeira
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?
Hebert_Coelho
jaissonduarte
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
rikg12
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.
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;
}