免责声明:我是JSF的新手,但仍然找不到任何其他问题来帮助我解决这个问题。
我在JSF一个CRUD视图(在primefaces对话框更具体地,如果这是重要的)时,我有ID作为长它工作得很好,但是当我使用的ObjectID作为ID(I使用的ObjectID,因为吗啡会自动 - 如果使用ObjectID,则生成ID。
ObjectID向下传输到视图并显示正常,但是当我点击保存时没有任何事情发生(如果我使用的话,在保存方法中没有遇到断点并且控制台中没有显示错误)只要一个ID这个工作正常。
这是ObjectID的输入字段和保存按钮的操作(我显示ObjectID,因为save方法返回null ObjectID,如果不这样做,则创建一个新记录)。
<p:inputText value="#{dealerBean.selectedDealer.id}"
style="display:none;" />
<p:commandButton id="saveButton" value="Save" update="dealers"
actionListener="#{dealerBean.save}"
title="Save" type="Submit" oncomplete="dealerDialog.hide()">
</p:commandButton>
//type of selectedDealer
@com.google.code.morphia.annotations.Entity
class Dealer {
@com.google.code.morphia.annotations.Id
@Property //Generates getters and setter in XTend
org.bson.types.ObjectId id;
}
我的猜测是它在反序列化ObjectID时遇到了麻烦(虽然在控制台中没有错误信息)但我不太了解JSF,知道从那里去哪里,任何帮助都会受到赞赏。
答案 0 :(得分:0)
感谢kolossus在上面的编辑中给出答案。这是我使用的代码(对不起,它是在groovy而不是Java)(由于XTend和验证问题,我从Xtend切换到groovy)
@FacesConverter("objectId")
class ObjectIdConverter implements Converter {
def Object getAsObject( FacesContext context, UIComponent component,
String value) {
if(value == null || "".equals(value) || value.size() < 10) {
return null
}
return new ObjectId(value)
}
def String getAsString(FacesContext context, UIComponent component,
Object value) {
if(value == null){
return null
}
if (value instanceof ObjectId) {
return (value as ObjectId).toString()
} else {
throw new IllegalArgumentException( "Cannot convert "+ value +" in KeyConverter" );
}
}
}