현재 사용자 편집 양식 작업 중입니다.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>
In the GET-Me thod 템플릿/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]
모든 필드가 올바르게 전송을 자식 객체의 이메일 필드를 제외하고.
나는 오류 데이터가 유효하고 재미있는 것은 내가 별도의 객체의 자식 이메일 요소를 잡을 때입니다 그것을 간다, 구조가 동일하다 발생하는 이유를 전혀 모르는
사람이 아이디어를 가지고 있는가 ?
미리 감사드립니다.
편집 : 이메일 클래스 :
@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();
}
}
포스트 방법 :
@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);
}
com.example.user.model.Email 및 EMail.java –
죄송합니다. 내 잘못이었습니다. 나는 코드의 어휘 철자를 수정했다. 클래스 EMail은 이메일과 같습니다. 제 직업에 관한 규정이 있습니다. 나는 그것이 최대 절전 모드에 대한 주석에 달려 있다고 생각한다. 컨트롤러에 사용하는 클래스는 데이터베이스 (엔티티)에서 사용하는 클래스와 동일합니다. 내일 나는 코드를 업데이트 할 것이다. –
게시물 처리 방법도 추가 할 수 있습니다. 처리 방법은 – Aeseir