【问题标题】:selectOneMenu Converter [duplicate]selectOneMenu 转换器 [重复]
【发布时间】:2013-07-21 16:21:58
【问题描述】:

大家好,我在 Primfaces 页面上工作,我必须创建一个 selectOneMenu 来从数据库中获取项目,所以我尝试这样做,但转换器仍然有问题

所以我的源代码如下:

选择一个菜单:

<p:selectOneMenu id="devises" required="true" value="#{pret.devise}" effect="fade" converter="devise">  
    <f:selectItem itemLabel="Select One" itemValue="" />  
    <f:selectItems value="#{devise.listDevise()}" var="devise" itemLabel="#{devise.nomDevise}" itemValue="#{devise}"/>  
</p:selectOneMenu>

转换器代码:

@FacesConverter(value = "devise")
public class DeviseConverter implements Converter{  

    public static List<Devise> devises = Devise.listDevise();  

    public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {  
        if (submittedValue.trim().equals("")) {  
            return null;  
        } else {  
            try {  
                int idDevise = Integer.parseInt(submittedValue);
                for (Devise p : devises) {  
                    if (p.getIdDevise()== idDevise) {  
                        return p;  
                    }  
                }
            } catch(NumberFormatException exception) {  
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid Devise"));  
            }  
        }
        return null;  
    }  

    public String getAsString(FacesContext facesContext, UIComponent component, Object value) {  
        if (value == null || value.equals("")) {  
            return "";  
        } else {  
            return String.valueOf(((Devise) value).getIdDevise());  
        }  
    }
}

错误代码是:“设计:验证错误:值无效”

【问题讨论】:

  • 你的 bean 中有 equals() 和 hashCode() 方法吗?

标签: jakarta-ee primefaces selectonemenu


【解决方案1】:

您的对象Devise 需要包含equals()hashCode() 方法。

您也可以使用此generic converter,它适用于所有类型的对象,您无需为所有选择列表编写转换器。

import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.WeakHashMap;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

@FacesConverter(value = "entityConverter")
public class EntityConverter implements Converter {

    private static Map<Object, String> entities = new WeakHashMap<Object, String>();

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object entity) {
        synchronized (entities) {
            if (!entities.containsKey(entity)) {
                String uuid = UUID.randomUUID().toString();
                entities.put(entity, uuid);
                return uuid;
            } else {
                return entities.get(entity);
            }
        }
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String uuid) {
        for (Entry<Object, String> entry : entities.entrySet()) {
            if (entry.getValue().equals(uuid)) {
                return entry.getKey();
            }
        }
        return null;
    }

}

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多