如何为JSF实现一个好的转换器?

时间:2019-02-03 08:57:35

标签: jsf primefaces

我正在尝试提高转换器的使用率,以将自动完成对象转换为JSF项目。这是我的转换器:

<

这是一个实体,

@实体 公共类ArticleColor实现了Serializable {

for (int i = 0;i < word.length(); i++)
    empty += word[word.length() - 1 - i];

这是我的toString()方法:

@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();
    }
}

最后这是我的自动填充:

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

这些组件运行良好,但是即使我已将对象的完整列表加载到自动完成功能中,我也很少混淆为什么我应该使用数据库从其键中检索实数。我有事吗?

1 个答案:

答案 0 :(得分:1)

您正在做我的转换器所做的一切。

我认为您所缺少的是,是的,您为AutoComplete加载了“对象”,但是如果您在浏览器中查看,您将看到的都是字符串值,例如“ 45、67、93”,代表ID。

当您从浏览器提交表单提交时,所有发送的字符串都是“ 43”之类的。因此,在服务器端,您需要一个转换器来将String 43转换回真实对象。它不必是DAO ...对于我的某些项目,如果对象列表不经常更改,我将使用ApplicationScoped缓存。但是对我来说,您正在做所有正确的事情。