Tôi đang cố gắng thêm thông báo lỗi email riêng vào mô hình của mình theo cách thủ công nhưng không có gì hiển thị trong chế độ xem.
Tôi nghĩ rằng đó có thể là cách tôi tạo hoặc gắn ObjectError với BindingResult.
Tôi đang thêm lỗi trong phần bắt.Thêm thông báo lỗi vào DataBinder Spring 3 cho các trường đối tượng tùy chỉnh
Dưới đây là nội dung của result.errors khi tôi rời khỏi trường email trống rỗng và JSR-303 chú thích kick in (hiển thị lỗi trong quan điểm):
[Field error in object 'user' on field 'email': rejected value []; codes [NotEmpty.user.email,NotEmpty.email,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.email,email]; arguments []; default message [email]]; default message [may not be empty]]
Dưới đây là nội dung của kết quả. lỗi sau khi tôi tự thêm các ErrorObject (lỗi email không hiển thị trong view):
[Error in object 'email': codes []; arguments []; default message [An account already exists for this email.]]
Bộ điều khiển:
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public ModelAndView post(@Valid User user, BindingResult result)
{
if (result.hasErrors())
{
ModelAndView modelAndView = new ModelAndView(
Consts.MODEL_RESISTER_PAGE);
modelAndView.addObject("user", user);
return modelAndView;
}
else
{
try
{
userService.addUser(user);
ModelAndView modelAndView = new ModelAndView(
Consts.MODEL_CARD_REPORTS_HOME_PAGE);
modelAndView.addObject("userRegisteredSuccess", Boolean.TRUE);
return modelAndView;
}
catch (DataIntegrityViolationException ex)
{
ObjectError error = new ObjectError("email","An account already exists for this email.");
result.addError(error);
ModelAndView modelAndView = new ModelAndView(
Consts.MODEL_RESISTER_PAGE);
modelAndView.addAllObjects(result.getModel());
modelAndView.addObject("user", user);
return modelAndView;
}
}
}
mẫu của tôi:
@Entity
public class User implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -5232533507244034448L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotEmpty
@Size(min=2, max=15)
private String firstname;
@NotEmpty
@Size(min=2, max=15)
private String surname;
@NotEmpty
@Email
private String email;
@NotEmpty
@Size(min=6, max=10)
private String password;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getFirstname()
{
return firstname;
}
public void setFirstname(String firstname)
{
this.firstname = firstname;
}
public String getSurname()
{
return surname;
}
public void setSurname(String surname)
{
this.surname = surname;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
add.html
<form id="registrationForm" action="#"
th:action="@{/registration}" th:object="${user}" method="post"
class="clearfix">
<legend>Registration</legend>
<div class="control-group input"
th:class="${#fields.hasErrors('firstname')}? 'control-group input error'">
<input type="text" th:field="*{firstname}"
placeholder="Firstname" /> <span class="help-block"
th:if="${#fields.hasErrors('firstname')}"
th:errors="*{firstname}"></span>
</div>
<div class="control-group input"
th:class="${#fields.hasErrors('surname')}? 'control-group input error'">
<input type="text" th:field="*{surname}" placeholder="Surname" />
<span class="help-block"
th:if="${#fields.hasErrors('surname')}"
th:errors="*{surname}"></span>
</div>
<div class="control-group input"
th:class="${#fields.hasErrors('email')}? 'control-group input error'">
<input type="text" th:field="*{email}" placeholder="Email" />
<span class="help-block" th:if="${#fields.hasErrors('email')}"
th:errors="*{email}"></span>
</div>
<div class="control-group input"
th:class="${#fields.hasErrors('password')}? 'control-group input error'">
<input type="password" th:field="*{password}"
placeholder="Password" /> <span class="help-block"
th:if="${#fields.hasErrors('password')}"
th:errors="*{password}"></span>
</div>
<div class="clearfix">
<input type="submit" class="btn btn-success btn-large"
value="Register" />
</div>
</form>
Tuyệt vời - Tôi không biết phương thức rejectValue. Đó là cố định vấn đề thạch. Cảm ơn –
Giống như chúng tôi đặt ** tin nhắn đã bản địa hoá ** trong 'rejectValue', chúng tôi có thể đặt ** tin nhắn đã bản địa hoá ** tức là" error.user "trong' ObjectError' không? Tôi không thể nhận được thông báo cục bộ nếu tôi sử dụng 'ObjectError'. Tôi đang nhận được tin nhắn được bản địa hoá bằng cách sử dụng 'rejectValue'. Bạn có thể vui lòng giúp đỡ ?? –
Tại sao bạn sử dụng 'ObjectError'? Bạn nên sử dụng phương thức 'rejectValue' thay vì' ObjectError' để thêm lỗi vào bộ điều khiển của bạn. Bằng cách này, bạn sẽ nhận được các tin nhắn được bản địa hoá. – jelies