我需要从我的控制器获取我的'Comment'(存储在DAO中)对象并将其显示在我的JSP中,但每次我从错误块中看到错误消息。
为什么会这样,我该怎么办?
我的代码的逻辑是下一个:
但是我从错误块中获取错误消息msg而不是成功块中的msg。
这是我的表格:
<form id="comment_${comment.getCommentId()}">
<textarea class="textarea" rows="10" name="text"></textarea>
<input type="hidden" name="bookId" value="${book.getBookId()}" />
<input type="hidden" name="parentId" />
<input type="hidden" name="commentId" value="${comment.getCommentId()}" /><br />
<input type="button" class="button" value="Reply" id="submit_${comment.getCommentId()}" onclick="ajaxsubmit(this.id)"/>
</form>
这是我的剧本:
<script type="text/javascript">
function ajaxsubmit(buttonId){
var formId = document.getElementById(buttonId).parentNode.id;
var dataString = $("#" + formId).serialize();
$.ajax( {
url: "ajaxcomment.htm",
type: "post",
data: dataString,
dataType: "json",
success: function(data) {
alert(data.getCommentAdded());
},
error: function() {
alert("error");
}
} );
}
这是我的控制器
@RequestMapping(value = "ajaxcomment.htm", method = RequestMethod.POST)
public @ResponseBody Comment ajaxcomment(
HttpServletRequest httpServletRequest,
@RequestParam(value = "bookId", required = false) Long bookId,
@RequestParam(value = "parentId", required = false) Long parentId,
@RequestParam(value = "commentId", required = false) Long commentId,
@RequestParam(value = "text", required = true) String text) {
String username = httpServletRequest.getRemoteUser();
User user = userDao.getUserByUsername(username);
Comment comment = new Comment();
// DAO logic
commentDao.addComment(comment);
return comment;
}
这是我的“评论”实体:
@Entity @Table(name = "COMMENT") public class Comment implements Serializable {
@Id
@GeneratedValue
@Column(name = "COMMENT_ID", nullable = false)
private Long commentId;
@Column(name = "COMMENT_TEXT", length = 512, nullable = true)
private String commentText;
@Column(name = "COMMENT_ADDED", length = 128, nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date commentAdded;
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
@JoinColumn(name = "BOOK_ID")
private Book book;
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_ID")
private Comment parentComment;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "parentComment")
@OrderBy("commentAdded")
private Collection<Comment> subcomments;
public void setCommentText(String commentText) {
this.commentText = commentText;
}
public String getCommentText() {
return this.commentText;
}
// other getters and setters are public too
这是我的applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="com.demo"/>
<context:component-scan base-package="com.demo.service"/>
<context:annotation-config />
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
<bean id="exceptionMessageAdapter"
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
<property name="messageConverters">
<list>
<!-- Support JSON -->
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
答案 0 :(得分:0)
可能在您的表单中,您设置的值为value="${book.getBookId()}"
而不是value="${book.bookId}"
。
换句话说,你必须通过引用bean中的字段名称(实体或其他)来使用表达式语言,而不是试图直接使用该字段的getter。
答案 1 :(得分:0)
有效。
我已经更新了我的控制器方法(处理程序):
@Autowired private DAOComment commentDao;
@RequestMapping(value = "ajaxcomment.htm", method = RequestMethod.POST)
public @ResponseBody String ajaxcomment(
HttpServletRequest httpServletRequest,
@RequestParam(value = "bookId", required = false) Long bookId,
@RequestParam(value = "parentId", required = false) Long parentId,
@RequestParam(value = "commentId", required = false) Long commentId,
@RequestParam(value = "text", required = true) String text) {
String username = httpServletRequest.getRemoteUser();
User user = userDao.getUserByUsername(username);
Comment comment = new Comment();
// DAO logic
commentDao.addComment(comment);
return "{\"id\":\"" + comment.getCommentId() + "\"," +
"\"username\":\"" + comment.getUser().getUsername() + "\"," +
"\"text\":\"" + comment.getCommentText() + "\"," +
"\"added\":\"" + comment.getFormattedDate() + "\"}";
}
我使用\“而不是',因为JSON.parse()
不会解析像'param':'value'
,"param":"value"
这样的字符串。
更新了脚本:
<script type="text/javascript">
function ajaxsubmit(buttonId, className){
var formId = document.getElementById(buttonId).parentNode.id;
var dataString = $("#" + formId).serialize();
$.ajax( {
url: "ajaxcomment.htm",
type: "post",
data: dataString,
dataType: "text",
success: function(data) {
var response = JSON.parse(data);
//This's it.
alert(response.id);
},
error: function() {
alert("Error has occured.");
}
} );
}
</script>