【发布时间】:2014-04-01 13:31:18
【问题描述】:
因此,在 javax 或 hibernate 验证失败后,模型变量将从 JSP 中消失。
因为我从模型中加载弹簧消息的代码,如填充:
<spring:message code="${editUser.role.rolename}"/>
验证失败后我松开它们并收到以下错误:
javax.servlet.jsp.JspTagException: No message found under code '' for locale 'en_US'.
在这种情况下,editUser 是由表单操作的模型对象,rolename 属性包含 spring 消息标签使用的翻译代码。
我的实体:
@Entity
@Table(name = "User")
public class BUser {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@NotEmpty
@NotBlank
@Column(name = "username")
private String username;
....
@ManyToOne
@JoinColumn(name = "role", unique = true)
private BRole role;
}
部分控制器:
@Controller
public class AccountController {
@RequestMapping(value = "/secure/user/edit/{username}", method = RequestMethod.GET)
public String editUser(Model model, @PathVariable String username) {
BUser user = bUserService.getUserByUsername(username);
if (user != null) {
user.setPassword(null);
model.addAttribute("editUser", user);
model.addAttribute("roles", bUserService.getRoles(false));
return "editUser";
} else {
return "404";
}
}
@RequestMapping(value = "/secure/user/edit/{username}", method = RequestMethod.POST)
public String editProcessUser(Model model, @PathVariable String username, @UserPrincipal BUser login, HttpSession session,
@Valid @ModelAttribute("editUser") BUser editUser, BindingResult result) {
if (result.hasErrors()) {
return "editUser";
}
//some more code after that... never reached after validation error
}
}
如何正确处理此类问题?
谢谢。
【问题讨论】:
-
再添加到模型中怎么样?
-
或者放到Session中
-
@Bart 不起作用,如果我这样做,错误消息就会消失。
-
@CodeChimp 我尝试使用
<c:set scope="session" var="myvar"><spring:message code="${editUser.role.rolename}" /></c:set>,但它不起作用。还是您的意思是将其添加到控制器中的会话中,在这种情况下,我认为c:set标记也应该这样做。 -
请显示处理验证的处理程序的控制器代码。
标签: spring jsp spring-mvc jsp-tags