Spring / Hibernate不会保留从HTML表单

时间:2017-02-23 00:30:57

标签: spring forms hibernate spring-mvc submit

在我目前的春季剧情中,我有一个类似的形式:

<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);
}

@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,由此实体类表示(省略了getters和setter):

@Entity
public class Texto extends Model {

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

    @Column
    private String idioma;

    @Column
    private String conteudo;
}

未保存在数据库中。任何人都可以知道实施表单的正确方法是什么来正确存储这些数据?我查看了浏览器的开发人员工具,并且正在提交数据,它只是没有被保存在数据库中。

1 个答案:

答案 0 :(得分:0)

在这个问题中,用户@AnsgarSchulte向我提供了提示,我更改了name="textos[0]表单中的html代码,并更改了我的PropertyEditorSupport类来处理这个数组并返回一个Texto对象属性idioma是向量的第一个元素,属性conteudo是剩下的所有元素(将所有元素连接在一个字符串中)。