我正在尝试提高转换器的使用率,以将自动完成对象转换为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;
这些组件运行良好,但是即使我已将对象的完整列表加载到自动完成功能中,我也很少混淆为什么我应该使用数据库从其键中检索实数。我有事吗?
答案 0 :(得分:1)
您正在做我的转换器所做的一切。
我认为您所缺少的是,是的,您为AutoComplete加载了“对象”,但是如果您在浏览器中查看,您将看到的都是字符串值,例如“ 45、67、93”,代表ID。
当您从浏览器提交表单提交时,所有发送的字符串都是“ 43”之类的。因此,在服务器端,您需要一个转换器来将String 43转换回真实对象。它不必是DAO ...对于我的某些项目,如果对象列表不经常更改,我将使用ApplicationScoped缓存。但是对我来说,您正在做所有正确的事情。