在我目前的春天項目的renderized形式之一是如下:提交的表單不完全保存在數據庫中
<form id="Usuario" class="form" role="form" method="post" action="/caixa/Usuario/insert">
<li class="list-group-item">
<field-box>
<label>login</label>
<input type="text" name="login" id="login" class="form-control" />
</field-box>
</li>
<li class="list-group-item">
<field-box>
<label>senha</label>
<input type="password" name="senha" id="senha" class="form-control" />
</field-box>
</li>
<li class="list-group-item">
<field-box>
<label>nome</label>
<input type="text" name="nome" id="nome" class="form-control" />
</field-box>
</li>
<li class="list-group-item">
<field-box>
<label>sobrenome</label>
<input type="text" name="sobrenome" id="sobrenome" class="form-control" />
</field-box>
</li>
<li class="list-group-item">
<field-box>
<label>email</label>
<input type="email" name="email" id="email" class="form-control" />
</field-box>
</li>
<li class="list-group-item">
<field-box>
<label>role</label>
<select multiple="multiple" name="role.id" id="role" class="form-control option" data-classe="Role">
</select>
</field-box>
</li>
<button type="submit" id="cadastrar" class="btn btn-primary">Cadastrar</button>
<div class="alert alert-success alert-dismissible" id="yes" role="alert" style="display: none;">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
Cadastro efetuado com sucesso
</div>
<div class="alert alert-danger alert-dismissible" id="not" role="alert" style="display: none;">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<span class="text"></span>
</div>
</form>
通過這種形式提交的數據是有關這個類:
@Entity
@Table(name = "usuario")
public class Usuario {
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name = "login")
@Input
private String login;
@Column(name = "senha")
@Input(type = "password")
private String senha;
@Column(name = "nome")
@Input
private String nome;
@Column(name = "sobrenome")
@Input
private String sobrenome;
@Column(name = "email")
@Input(type = "email")
private String email;
@ManyToMany
@JoinTable(name="role_members", joinColumns={@JoinColumn(name="fk_user")}, inverseJoinColumns={@JoinColumn(name="fk_role")})
@LazyCollection(LazyCollectionOption.FALSE)
@Select(classe = Role.class)
private List<Role> role;
}
$(document).on("submit", "form.form", function (event) {
event.preventDefault();
var $form = $(this), url = $form.attr("action");
var posting = $.post(url, $(this).serialize());
posting.done(function(data) {
if(data == "") {
$("#yes").show();
} else {
var $temp = $('<div/>', {html:data});
$("#not").find(".text").html($temp.remove('head').html());
$("#not").show();
}
$("form.form").each(function(){
this.reset();
});
});
});
和通過該方法:
提交過程是由這jQuery代碼處理在我的控制器,服務和DAO類:
@RequestMapping(value = "insert")
@ResponseBody
public void insert(@ModelAttribute("object") E object) throws Exception {
try {
serv.insert(object);
} catch (Exception e) {
throw e;
}
}
public void insert(E object) {
dao.persist(object);
}
@Transactional
public void persist(E object) {
sessionFactory.getCurrentSession().persist(object);
}
但是當我運行應用程序,並在瀏覽器中打開該視圖,並提交該表格,數據,而不將數據從<select>
場保存在數據庫中。我檢查瀏覽器控制檯(在Firefox中),並確認所有字段都正在提交給服務器,但字段role
是唯一沒有存儲的字段。
任何人都可以看到這裏的謠言是什麼?
您必須確保您傳入數組,因爲它似乎是您的多選擇選擇組。不應該角色選擇字段的名稱只是'role'而不是'role.id'? – Vaelyr 2014-09-28 19:11:42
@Vaelyr不,我嘗試使用'role'而不是'role.id',但是這樣沒有數據保存在數據庫中,並且出現錯誤。 – 2014-09-28 19:36:17
您可以檢查您通過瀏覽器發送的發佈請求傳遞了哪種數據。角色是否實際發送? – Vaelyr 2014-09-29 06:41:42