在我目前的春季剧情中,我有一个类似的形式:
<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;
}
未保存在数据库中。任何人都可以知道实施表单的正确方法是什么来正确存储这些数据?我查看了浏览器的开发人员工具,并且正在提交数据,它只是没有被保存在数据库中。
答案 0 :(得分:0)
在这个问题中,用户@AnsgarSchulte向我提供了提示,我更改了name="textos[0]
表单中的html代码,并更改了我的PropertyEditorSupport类来处理这个数组并返回一个Texto
对象属性idioma
是向量的第一个元素,属性conteudo
是剩下的所有元素(将所有元素连接在一个字符串中)。