使用MongoDB的JSF Views和ObjectID在保存操作时失败

时间:2012-12-01 04:21:36

标签: mongodb jsf primefaces

免责声明:我是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,知道从那里去哪里,任何帮助都会受到赞赏。

1 个答案:

答案 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" );
        }
    }
}