带有MongoDB的JSF视图和ObjectID在保存操作时失败



免责声明:我是JSF的新手,但仍然找不到任何其他问题来帮助我。

我在JSF中有一个CRUD视图(如果这很重要的话,更具体地说是在素数面对话框中),当我有ID作为长ID时,它可以正常工作,但当我使用ObjectID作为ID时(我使用ObjectID,因为如果使用ObjectID,Morphia会自动生成ID)。

发生的情况是,ObjectID向下传输到视图并显示良好,但当我单击保存时,不会发生任何事情(断点在保存方法中不会被击中,控制台中也不会显示任何错误),如前所述,如果我使用一个长ID,这会很好地工作。

这是ObjectID的输入字段和保存按钮的操作(当保存方法返回空ObjectID时,我会显示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还不够了解,不知道从哪里开始,如果有任何帮助,我将不胜感激。

感谢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" );
}
}
}

最新更新