2017-02-23 4 views
0

からsubmitedすべてのデータを永続化しませ休止、私はそのような形を持っている春/私の現在の春のプロジェクトで、HTMLフォーム

コントローラ

@RequestMapping(value = "/insert", method=RequestMethod.POST) 
@ResponseBody 
@PreAuthorize("hasPermission(#user, 'insert_'+#this.this.name)") 
public void insert(@Valid E object, BindingResult result) { 
    serv.insert(object); 
} 

サービス

@Transactional 
public void insert(E object) { 
    dao.insert(object); 
} 

DAO

@Transactional 
public void insert(E object) { 
    Session session = sessionFactory.openSession(); 
    Transaction tx = null; 
    try { 
     tx = session.beginTransaction(); 
     session.persist(object); 
     tx.commit(); 
    } catch (Exception e) { 
     if(tx != null) 
      tx.rollback(); 
    } finally { 
     session.close(); 
    } 
} 

のみフィールドtituloが永続化されます。このエンティティ・クラス(ゲッターとセッターは省略)で表されるフィールドtextos

@Entity 
public class Texto extends Model { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Integer id; 

    @Column 
    private String idioma; 

    @Column 
    private String conteudo; 
} 

はデータベースに保存されていません。誰でもこのデータを適切に保存するためにフォームを実装する正しい方法が何であるかを知ることができます。私はブラウザの開発者ツールをチェックして、データが送信されていて、それはデータベースに保存されていないだけです。

答えて

0

、私はname="textos[0]ためのフォームのHTMLコードを変更し、この配列を処理し、プロパティidiomaは最初のものでTextoオブジェクトを返すために私PropertyEditorSupportクラスを変更します要素と、すべての要素が左にある(すべて1つの文字列に連結されている)プロパティconteudoです。

0

あなたのモデルクラスTextoは、クラスEとの@OneToMany関係を持ち、1つのEがTextoの複数のインスタンスを参照すると仮定します。これがあなたのモデルが表現しているものであれば、Springがリクエストペイロードを解析できるように、テキストエリア名に異なる構文を使用する必要があります。

あなたのケースでは、SpringはあなたのクラスEのプロパティtextos.conteudoを検索します。私が想定しているように、そのテキストはコレクションになります、Springはこれを無視します。

このテキストは、Listのようなインデックスベースのコレクションとしてモデル化され、テキストエリア名の名前をname="textos[0].conteudo"に変更しようとすると、SpringにtextosがListであり、SpringがPOSTペイロードを解析できることを伝えます。この質問にユーザー@AnsgarSchulteによって私に与えられたヒントを使用して

関連する問題