2017-02-23 91 views
0

submited在我目前的Spring项目的所有数据,我有一个这样的形式:春/休眠不坚持从HTML表单

<form role="form" class="form" id="form" method="post" action="/loja/pagina/insert" enctype="multipart/form-data"> 
     <input class="form-control" type="hidden" name="id" /> 

     <label>Title</label> 
     <input class="form-control" type="text" name="titulo" /> 

     <ul class="nav nav-tabs" role="tablist"> 
      <li role="presentation" class="active"> 
      <a href="#pt-BR" aria-controls="pt-BR" role="tab" data-toggle="tab">pt-BR</a> 
      </li> 
      <li role="presentation"> 
      <a href="#es-ES" aria-controls="es-ES" role="tab" data-toggle="tab">es-ES</a></li> 
      <li role="presentation"><a href="#en-US" aria-controls="en-US" role="tab" data-toggle="tab">en-US</a></li> 
     </ul> 

     <div class="tab-content"> 
      <div role="tabpane1" class="tab-pane active" id="pt-BR"> 
      <input type="hidden" name="textos.idioma" value="pt-BR" /> 
      <textarea class="summernote" name="textos.conteudo"></textarea> 
      </div> 

      <div role="tabpane1" class="tab-pane" id="es-ES"> 
      <input type="hidden" name="textos.idioma" value="es-ES" /> 
      <textarea class="summernote" name="textos.conteudo"></textarea> 
      </div> 

      <div role="tabpane1" class="tab-pane" id="en-US"> 
      <input type="hidden" name="textos.idioma" value="en-US" /> 
      <textarea class="summernote" name="textos.conteudo"></textarea> 
      </div> 
     </div> 
</form> 

当我提交此表来此方法:

控制器

@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,这是由该实体类(getter和设定器中省略)表示:

@Entity 
public class Texto extends Model { 

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

    @Column 
    private String idioma; 

    @Column 
    private String conteudo; 
} 

不保存在数据库上。任何人都可以告诉正确的方式来实现表单以正确存储这些数据?我检查了浏览器的开发人员工具,并且正在提交数据,它只是没有被保存在数据库中。

回答

0

随着这一问题被用户@AnsgarSchulte给我的暗示,我改变形式的HTML代码为name="textos[0]和改变我的PropertyEditorSupport类来处理这个数组,并成为第一个财产idioma返回Texto对象矢量元素和属性conteudo是剩下的所有元素(在一个字符串中连接所有元素)。

0

我认为,您的模型类Texto与类E有@OneToMany关系,因此一个E引用了多个Texto实例。如果这是您的模型表达的内容,那么您必须为textarea名称使用不同的语法,以便Spring能够解析您的请求负载。

在你的情况下,Spring会在你的类E上搜​​索一个属性textos.conteudo。我假设textos将是一个集合,Spring将忽略它。

假设textos将被建模为基于索引的集合(如List),请尝试将您的textareas名称重命名为name="textos[0].conteudo"等,以告知Spring textos是List,并且Spring将能够解析POST有效内容。