2012-03-09 7 views
1

このコードで何が問題になっていますか?Spring MVCカスタムクラスプロパティエディタ

私はクラスにバインドされた「Fornitore fornitore」プロパティをこのように持っている:私は春のDataBinderとの間の関係を参照してくださいわからない

Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86) 
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140) 
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) 
    at it.trew.prove.model.beans.Fornitore_$$_javassist_0.getRagioneSociale(Fornitore_$$_javassist_0.java) 
    at it.trew.prove.web.controllers.ScadenziarioController$1.getAsText(ScadenziarioController.java:56) 

答えて

1

@InitBinder 
    protected void initBinder(WebDataBinder binder) {  

     binder.registerCustomEditor(Fornitore.class, new PropertyEditorSupport() {   
      @Override 
      public void setAsText(String fornitoreId) throws IllegalArgumentException { 
       logger.info("FORNITORE:: setValue"); 
       setValue((Fornitore) fornitoreService.getFornitore(fornitoreId)); 
      } 
      @Override 
      public String getAsText() { 
       logger.info("FORNITORE:: getValue"); 
       if (getValue() == null) { 
        return ""; 
       } else { 
        return ((Fornitore) getValue()).getRagioneSociale(); 
       }    
      }   
     }); 
    } 

はで終了以下のHibernate Sessionエラーが発生します。私は明らかにデータバインダーに間違いがないのを見ますが、休止状態のセッションを開始することとは関係ありません。

+0

あなたは理性の男性を持っています...しかし...私は、カスタムポーズのためのプロパティエディタ - フォームバインディングメカニズムを理解しているかどうかを知りたかったのです。それが正しいか? –

+0

私は\ @InitBinderを大いに利用する必要はありませんでしたが、それのように見えます。 Spring 3.1を使用している場合は、追加のパラメータの型を設定することができるRequestMappingHandlerAdapterと、\ @ RequestMappingが処理するメソッドのためにそれらを設定する方法があります。 – drobert

+0

Heh、これは私がユーザーに通知しようとしているこの考えなくリテラル '@'を出力する方法がわからないようです。 \はきれいではない、良い方法がありますか? – drobert

0

この質問は古いようですが、私は一日中頭をひっぱっていて、私の解決策が誰かを助けてくれることを願っています。

方法

fornitoreService.getFornitore(fornitoreId) 

は、プロキシオブジェクトではなく、実際のオブジェクトを返しているようです。私はリポジトリがどのように実装されているのかわかりませんが、私の推測では、サービスの下の基底のリポジトリメソッドはプロキシオブジェクトを返すものであり、実際のものではありません。

私の場合(Spring Data)、解決策は、基底のリポジトリメソッドをJpaRepository getOneからCrudRepository findOneメソッドに変更していました。