2014-09-28 70 views
0

在我目前的春天項目的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">&times;</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">&times;</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是唯一沒有存儲的字段。

任何人都可以看到這裏的謠言是什麼?

+0

您必須確保您傳入數組,因爲它似乎是您的多選擇選擇組。不應該角色選擇字段的名稱只是'role'而不是'role.id'? – Vaelyr 2014-09-28 19:11:42

+0

@Vaelyr不,我嘗試使用'role'而不是'role.id',但是這樣沒有數據保存在數據庫中,並且出現錯誤。 – 2014-09-28 19:36:17

+0

您可以檢查您通過瀏覽器發送的發佈請求傳遞了哪種數據。角色是否實際發送? – Vaelyr 2014-09-29 06:41:42

回答

0

我覺得你在@JoinTable定(name = 「role_members」 列名,joinColumns問題= {@ JoinColumn(NAME =」 fk_user 「)},inverseJoinColumns = {@ JoinColumn(name =」 fk_role「)})

列名fk_user不存在於您的實體類中。如果你想使用不同的名字,那麼使用referencedColumnName屬性並給出實際的字段名稱。 例如。我們使用兩個實體的身份證,然後改變後,它會像

@JoinTable(name="role_members", joinColumns={@JoinColumn(name="fk_user", referencedColumnName="id")}, inverseJoinColumns={@JoinColumn(name="fk_role",referencedColumnName="id")}) 

希望它會起作用。

+0

我將此添加到我的代碼,但問題仍然發生:插入處理沒有錯誤,但角色字段的值不存儲。 – 2014-09-29 12:41:48

相關問題