控制器类 -
@Controller
@SessionAttributes({"id", "roleId"})
@RequestMapping("/User")
public class UserController {
@Autowired
private UserService userv = null;
@InitBinder("stdUser")
private void initBinder(WebDataBinder binder) {
System.out.println("1111======"+binder.getObjectName());
binder.setValidator(new NewUserValidator());
System.out.println("2222======"+binder.getObjectName());
}
@RequestMapping(value = "/allUsers")
public ModelAndView allUser(@ModelAttribute("userSetup")@Valid UserBean stdUser, BindingResult result, Map<String, Object> map, HttpSession session) {
StdCheckAccessV chk = new StdCheckAccessV();
chk.setFexe(Screens.User.substring(Screens.User.lastIndexOf("/") + 1, Screens.User.length()));
chk.setUid(Long.parseLong(session.getAttribute("id").toString().trim()));
chk.setRid(Long.parseLong(session.getAttribute("roleId").toString().trim()));
chk = userv.getAccess(chk);
List<StdUsers> l = userv.getUsersList();
stdUser.setChkAccessV(chk);
map.put("userList", l);
return new ModelAndView(Screens.User);
}
@RequestMapping(value = "/submitUser")
public ModelAndView addOrUpdate(@ModelAttribute("userSetup")@Valid UserBean stdUser, BindingResult result, HttpSession session, final RedirectAttributes redA) {
try {
int res = 0;
Long id = stdUser.getStdUsers().getId();
if (result.hasErrors()) {
System.out.println("///////result has errors " + result.toString());
return new ModelAndView("redirect:/User/allUsers");
}
System.out.println("////////the id============"+id);
if (id == null) {
System.out.println("/////inside the if");
stdUser.getStdUsers().setUserGroupId(Long.parseLong(session.getAttribute("id").toString().trim()));
stdUser.getStdUsers().setCreatedBy(Long.parseLong(session.getAttribute("id").toString().trim()));
stdUser.getStdUsers().setCreationDate(new Date());
res = userv.submitUser(stdUser);
} else {
System.out.println("/////inside the else");
stdUser.getStdUsers().setUpdateDate(new Date());
stdUser.getStdUsers().setUpdatedBy(Long.parseLong(session.getAttribute("id").toString().trim()));
res = userv.updateUser(stdUser);
}
} catch (Exception e) {
System.out.println("////Exception in add or update method " + e);
}
return new ModelAndView("redirect:/User/allUsers");
//return "redirect:/User/allUsers";
}}
Validator类 -
@Component
public class NewUserValidator implements Validator {
@Override
public boolean supports(Class<?> userOb) {
return UserBean.class.equals(userOb);
}
@Override
public void validate(Object target, Errors errors) {
try {
UserBean user = (UserBean) target;
if (user.getStdUsers().getUserName() == null) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "stdUsers.userName", "user.name.empty");
//errors.reject("stdUsers.userName", "User Name is mandatory");
}
} catch (Exception e) {
System.out.println(e);
}
}
} Bean类 -
public class UserBean {
private @Valid StdUsers stdUsers;
private @Valid StdCheckAccessV chkAccessV;
private boolean listView = true;
private String rePassword;
getters and setters.... }
的index.jsp -
<body>
<%
session.setAttribute("id", 1);
session.setAttribute("roleId", 1);
%>
<a href="User/allUsers.html">User</a><br>
</body>
CMN / STD100002.jsp页面
<td class="tdright"><form:label path="stdUsers.userName">User Name<em>*</em></form:label></td>
<td><form:input path="stdUsers.userName"/></td>
<td><form:errors path="stdUsers.userName"></form:errors></td>
<a href="#" name="btnsub" id="btnsub" onclick="submitUser()">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td width="25" height="24px" align="center">
<img src="${pageContext.servletContext.contextPath}/resources/images/Buttons/gray icon/Add.png" width="16" height="15" border="0" />
</td>
<td>Submit</td>
<td></td>
</tr>
</table>
</a>
<script type="text/javascript">
function submitUser(){
document.form1.action="${pageContext.servletContext.contextPath}/User/submitUser";
document.form1.submit();
}
</script>
我正在关注春季使用验证的教程,因为我是春天的新手。 单击提交按钮,同时将用户名字段留空,应该使用来自Validator的消息进行验证。 当我试图通过 -
打印控制器类中的错误System.out.println("result has errors " + result.toString());
打印 -
result has errors org.springframework.validation.BeanPropertyBindingResult: 1 errors
请帮助,我没有得到我错的地方。
我使用此代码检查错误的位置 -
for (Object object : result.getAllErrors()) {
if (object instanceof FieldError) {
FieldError fieldError = (FieldError) object;
System.out.println("the field errors::::::::::::::::"+fieldError.getCode());
}
if (object instanceof ObjectError) {
ObjectError objectError = (ObjectError) object;
System.out.println("the object errors:::::::::"+objectError.getCode());
}
}
我找到了 -
the field errors::::::::::::::::user.name.empty
the object errors:::::::::user.name.empty
///////result has errors org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'userSetup' on field 'stdUsers.userName': rejected value []; codes [user.name.empty.userSetup.stdUsers.userName,user.name.empty.stdUsers.userName,user.name.em pty.userName,user.name.empty.java.lang.String,user.name.empty]; arguments []; default message [null]
由于我将这两个字段放空以检查验证。如果我将字段设置为空时会出现这些错误,那么我该如何验证它们呢?
StdUser -
@Entity
@Table(name = "STD_USERS")
@NamedQueries({
@NamedQuery(name = "StdUsers.findAll", query = "SELECT s FROM StdUsers s")})
public class StdUsers implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GenericGenerator(name="generator",strategy="increment")
@GeneratedValue(generator="generator")
@Basic(optional = false)
@Column(name = "ID", nullable = false)
private Long id;
@Basic(optional = false)
@Column(name = "USER_NAME", nullable = false, length = 50)
private String userName;
setters and getters.....
任何人都请回复。
答案 0 :(得分:1)
哦,终于在这里得到了解决方案 - 将Validator类更改为 -
try {
UserBean user = (UserBean) target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "stdUsers.userName","required.stdUsers.userName" ,"User name required");
} catch (Exception e) {
System.out.println(e);
}
并且在Controller类中,而不是在 result.hasError(),即.-
时返回到控制器的allUsers方法return new ModelAndView("redirect:/User/allUsers");
更改为(导航到页面) -
return new ModelAndView("/CMN/STD100002");
并且如果您要获得与日期转换相关的错误,请在您的控制器类中使用它 -
@InitBinder
private void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");//edit for the format you need
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}