2014-12-03 127 views
0

我目前正在編寫一個用戶編輯表單。Spring + Thymeleaf綁定表單NullpointerException

我有如下結構的用戶對象(僞代碼):

User 

String name, 
int age, 
Address adress, 
Email email, 
User child, 

getter/setter 

現在,這個目標我把作爲對象的Model如下所示:

@RequestMapping(value = "/{login}/edit", method = RequestMethod.GET) 
public ModelAndView editUserByLogin(@PathVariable("login") final String login) { 
    final User currentUser = UserRepository.findPersonByLogin(login); 

    ModelAndView mav = new ModelAndView(URL_EDIT_USER); 
    mav.addObject(MODEL_USER, currentUser); 

    return mav; 
} 

在我模板(我用thymeleaf)我這樣綁定這些對象:

<form class="form-horizontal" method="post" > 
<div class="form-group"> 
    <label class="col-sm-2 control-label" th:text="#{user.name}">name</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" th:field="*{user.name}" /> 
    </div> 
</div> 
<div class="form-group"> 
    <label class="col-sm-2 control-label" th:text="#{user.address.street}">name</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" th:field="*{user.address.street}" /> 
    </div> 
</div> 
<div class="form-group"> 
    <label class="col-sm-2 control-label" th:text="#{user.child.email.value}">name</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" th:field="*{user.child.email.value}" /> 
    </div> 
</div> 
<div class="form-group"> 
    <label class="col-sm-2 control-label" th:text="#{user.child.address.street}">name</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" th:field="*{user.child.address.street}" /> 
    </div> 
</div> 
</form> 

在GET-Me模板/ html顯示我預期的正確數據。現在我編輯的字段並提交表單,然後我得到以下錯誤:

java.lang.NullPointerException: null 
    at com.example.user.model.Email.hashCode(EMail.java:66) ~[classes/:na] 
    at java.lang.Object.toString(Unknown Source) ~[na:1.8.0_25] 
    at java.lang.String.valueOf(Unknown Source) ~[na:1.8.0_25] 
    at java.lang.StringBuilder.append(Unknown Source) ~[na:1.8.0_25] 
    at org.springframework.validation.FieldError.toString(FieldError.java:102) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] 
    at java.lang.String.valueOf(Unknown Source) ~[na:1.8.0_25] 
    at java.lang.StringBuilder.append(Unknown Source) ~[na:1.8.0_25] 
    at org.springframework.validation.AbstractErrors.toString(AbstractErrors.java:243) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] 
    at org.springframework.validation.BindException.getMessage(BindException.java:284) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] 
    at java.lang.Throwable.getLocalizedMessage(Unknown Source) ~[na:1.8.0_25] 
    at java.lang.Throwable.toString(Unknown Source) ~[na:1.8.0_25] 
    at java.lang.String.valueOf(Unknown Source) ~[na:1.8.0_25] 
    at java.lang.StringBuilder.append(Unknown Source) ~[na:1.8.0_25] 

所有字段正確地傳輸,除非子對象的電子郵件領域。

我不知道爲什麼會出現錯誤,該結構是相同的,數據是有效的,有趣的是,當我搶孩子email元素在一個單獨的對象超出它

沒有人有一個想法?

在此先感謝。

編輯: 電子郵件類:

@Entity(name="Email") 
public class Email implements Serializable 
{ 
    private static final long serialVersionUID = 6891079722082340011L; 

    @Id() 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Expose 
    protected Long eMailId; 
    @Expose 
    protected String value; 

    //getter/setter 

    @Override 
    public boolean equals(Object obj) 
    { 
     if(obj instanceof EMail){ 
      return value.equals(((Email) obj).getValue()); 
     } 
     return false; 
    } 

    @Override 
    public int hashCode() 
    { 
     return value.hashCode(); 
    } 
} 

POST方法:

@RequestMapping(value = "/{login}/edit", method = RequestMethod.POST) 
public ModelAndView updateUser(@PathVariable("login") final String login, @ModelAttribute final User webUser) { 
    final Person repoUser = personRepository.findPersonByLogin(login); 
    repoUser.updateWith(webUser); 

    return new ModelAndView("redirect:" + URL_USERS_OVERVIEW); 
} 
+0

post com.example.user.model.Email and EMail.java – 2014-12-03 15:40:17

+0

對不起,這是我的錯。我已經更正了代碼詞彙的拼寫。 EMail類與Email類似。我的工作有代碼。我認爲這取決於冬眠的註釋。我用於控制器的類與我用於數據庫(實體)的類相同。明天我會更新代碼。 – 2014-12-03 18:56:17

+0

您是否也可以添加帖子處理方法,因爲您只有獲取處理方法 – Aeseir 2014-12-04 02:16:15

回答

1

該NullPointerException異常是在你Email.hashCode()方法發生。看看你的代碼,如果value爲空,可能會發生這種情況。

您發佈的模板不包含user.email.value字段,所以這很可能是爲什麼它爲空。

您可能需要爲用戶電子郵件添加一個字段,或更改hashCode方法,以便處理空值。

+0

謝謝。不知何故,我有一個hashCode方法,可能是自動生成的,在我的實體代碼中被覆蓋。 – 2018-02-27 20:47:46

相關問題