如何实现JSF的好转换? [重复]

问题描述 投票:1回答:1

这个问题已经在这里有一个答案:

我想提高我的转换器的使用,用于自动完成对象为JSF项目。这是我的转换器:

@FacesConverter(value = "articleColorConverter", forClass = ArticleColor.class)
public class ArticleColorConverter implements Converter {

    private ArticleColorDao articleColorDao;

    public ArticleColorConverter() {
        super();
        try {
            InitialContext ic = new InitialContext();
            articleColorDao = (ArticleColorDao) ic.lookup("java:module/ArticleColorDao");
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

    @Override
    public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
        try {
            Long.valueOf(value);
            return articleColorDao.findArticleColorByPk(Long.valueOf(value));
        } catch (Exception e) {
            return null;
        }

    }

    @Override
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {
        return value.toString();
    }
}

这是实体:

@实体公共类ArticleColor实现Serializable {

@Id
@GeneratedValue
private Long pk;
private String code;
private String description;
private boolean deleted;

这是我的toString()方法:

Override
public String toString() {
    String result = description;
    if (code != null) {
        result += " (" + code + ")";
    }
    return result;
 }

最后,这是我的自动完成:

<p:autoComplete id="acArticleColor"
                                        value="#{createOrderSelectionView.productionOrder.articleColor}"
                                        completeMethod="#{createOrderSelectionView.completeTextArticleColor}"
                                        style="margin-bottom:10px;" var="articleColor"
                                        itemLabel="#{articleColor}" converter="articleColorConverter"
                                        itemValue="#{articleColor.pk}" forceSelection="true">
                                    </p:autoComplete>

这些组件工作得很好,但我有点混乱,我为什么要使用数据库来检索其键现实,即使我已经加载到自动完成对象的完整列表。我错了的东西?

jsf primefaces
1个回答
1
投票

你在做什么我的所有转换器做。

我认为你缺少的是,是的,你用“对象”装你自动完成,但如果你在浏览器看您能看到的是字符串值,如“45,67,93”代表的ID。

当你形成了从浏览器提交发送所有像“43”的字符串。所以,在你的服务器端,您需要一个转换器把该字符串43回一个真正的对象。这并不一定是一个DAO ......对于我的一些项目我使用ApplicationScoped缓存如果对象的列表不经常更改。不过,我觉得你在做所有正确的事情。

© www.soinside.com 2019 - 2024. All rights reserved.