【发布时间】:2017-12-21 04:05:48
【问题描述】:
我正在处理 Spring MVC 项目 spring 无法转换我的 Post 对象所需的用户对象。
我的 NewPost 对象:
public class NewPost {
private int postId;
@NotEmpty(message ="Title must not be empty!")
@Length(max = 50, message="Title must be less then 50 character")
private String title;
@NotEmpty(message ="Comment must not be empty!")
private String content;
@Length(max = 100, message="must be less then 100 character")
private String imagePath;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime publishDate;
private User user;
我的控制器:
//Get lates post from DB.
@RequestMapping(value = "/displayBlogPage", method = RequestMethod.GET)
public String displayLatesPost(Model model) {
List<NewPost> displayAllPost = new ArrayList<>();
displayAllPost = NPDao.getAllPost();
model.addAttribute("displayAllPost", displayAllPost);
//get newPost to the model.
model.addAttribute("newPost", new NewPost());
//get user object to the model
model.addAttribute("user", userDao.getUserbyId(1));
LocalDateTime timeStamp = LocalDateTime.now();
model.addAttribute("timeStamp", timeStamp);
return "NewPostPage";
}
//for add Post form
@RequestMapping(value = "/newPost", method = RequestMethod.POST)
public String createPost( @Valid @ModelAttribute("newPost") NewPost newPost, BindingResult result) {
if(result.hasErrors()){
return "NewPostPage";
}
NPDao.addNewPost(newPost);
return "redirect:NewPostPage";
}
我的 JSP
<sf:form class="form-horizontal"
role="form" method="POST"
action="newPost" modelAttribute="newPost" >
<div class="col-md-12">
<div class="form-group">
<div class="col-md-6">
<sf:input type="text" class="form-control" path="title" placeholder="title" />
<sf:errors path="title" cssclass="error" ></sf:errors>
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<sf:input type="text" class="form-control" path="imagePath" placeholder="image" />
<sf:errors path="imagePath" cssclass="error" ></sf:errors>
<sf:input type="text" class="form-control" path="publishDate" placeholder="date" value="${timeStamp}" />
<sf:errors type="date" path="publishDate" cssclass="error" ></sf:errors>
<sf:input type="text" class="form-control" path="user" placeholder="user" value="${user}"/>
<sf:errors path="user" cssclass="error" ></sf:errors>
<sf:input type="text" class="form-control" path="postId" placeholder="postid"/>
<sf:errors path="postId" cssclass="error" ></sf:errors>
<div class="form-group">
<div class="col-md-12">
<textarea type="text" class="form-control comment" name="comment" placeholder="Comment" required ></textarea>
<input type="submit" id="add"class="btn btn-default" value="Submit Post"/>
</div>
</div>
</div>
</sf:form>
这里是个例外:
无法将 java.lang.String 类型的属性值转换为属性用户所需的 com.sg.sophacms.Model.User 类型;嵌套异常是 java.lang.IllegalStateException:无法将 java.lang.String 类型的值转换为属性用户所需的 com.sg.sophacms.Model.User 类型:找不到匹配的编辑器或转换策略
【问题讨论】:
-
@Rnhep,在从 UI 对控制器进行 POST 调用期间是否发生此异常?
-
你的 JSP 是什么?您是否尝试将其绑定到文本字段?如果是这样,您将需要像 PropertyEditor 和 getAsText/setAsText 这样的转换策略。看到这个线程:stackoverflow.com/questions/912257/…
-
@Kumar。是的。这发生在对 newPost 方法的 POST 调用期间。提交表单时。
-
@geneb。我总得发布 JSP。生病把它快点。是的,我的输入字段是一个文本字段。
-
@Rnhep 此异常是因为用户对象将其作为字符串从 UI 中生成。您可以删除该字段的 type=“text” 并重试吗?
标签: java spring spring-mvc