0

免責事項:私はJSFを初めて使用しますが、これに役立つ他の質問はまだ見つかりませんでした.

ID が長い場合は JSF に CRUD ビューがあります (より具体的には、それが重要な場合は primefaces ダイアログにあります)。ID として ObjectID を使用すると (Morphia が ID を自動生成するため、ObjectID を使用します) ObjectID を使用している場合)。

ObjectID がビューに転送され、正常に表示されますが、保存をクリックしても何も起こりません (ブレークポイントは保存メソッドでヒットせず、コンソールにエラーは表示されません)。 IDこれはうまくいきます。

ObjectID の入力フィールドと保存ボタンのアクションを次に示します (保存メソッドが null の 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 については十分に理解していないため、そこからどこに移動すればよいかを知ることができず、助けていただければ幸いです。

4

1 に答える 1

0

上記の編集で答えてくれたkolossusに感謝します。これは私が使用したコードです(Javaではなくgroovyで申し訳ありません)(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" );
        }
    }
}
于 2013-01-23T06:19:30.420 に答える