0
在我的情況下,Web服務器返回HTTP狀態500,請參閱下面的完整堆棧。發生在方法editWorker
BindingResult和bean名稱'tabel'的普通目標對象都不是HTTP狀態500
錯誤時的方法如果用第二形式(..的ModelAttribute =「TABEL」 ..)工作,當你不使用Spring標籤返回一個視圖
@RequestMapping(value=("/worker/edit/{workerId}"), method = RequestMethod.GET)
public String editWorker(@PathVariable("workerId") Long workerId, Model model) {
Worker worker = workerService.getWorkerById(workerId);
model.addAttribute(worker);
return "db_editor"; //error occurs here
}
,再有就是沒有錯誤。
請告訴我,這是怎麼回事?
JSP文件:
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<div id="editor">
<div id="f_ed">
<sf:form method="post" action="/db_editor/worker/add" modelAttribute="worker">
<sf:hidden path="id"/>
<fieldset>
<table>
<tr>
<td><sf:label path="fam">First name</sf:label></td>
<td><sf:input path="fam" size="30"/><br/>
<sf:errors path="fam" cssClass="error" />
</td>
<td>Табель</td>
</tr>
<tr>
<td><sf:label path="imj">Last name</sf:label></td>
<td><sf:input path="imj" size="30"/><br/>
<sf:errors path="imj" cssClass="error" />
</td>
</tr>
<tr>
<td><sf:label path="otch">Middle name</sf:label></td>
<td><sf:input path="otch" size="30"/><br/>
<sf:errors path="otch" cssClass="error" />
</td>
</tr>
<tr>
<td></td>
<td><input name="commit" type="submit" value="Commit" />
</td>
</tr>
</table>
</fieldset>
</sf:form>
</div>
<div id="tab_ed">
<sf:form method="post" action="/db_editor/tabel/add" modelAttribute="tabel">
<sf:input path="d" type="date" />
<sf:input path="d_type" size="2"/>
<input name="commit" type="submit" value="Add">
</sf:form>
</div>
<c:if test="${!empty workerList}">
<div id = "r_ed">
<table>
<tr>
<th>Name</th>
<th>BD</th>
</tr>
<c:forEach var="worker" items="${workerList}">
<s:url value="db_editor/worker/edit/${worker.id}" var="edit_url" />
<tr>
<td>${worker.fam}</td>
<td>${worker.imj}</td>
<td>${worker.otch}</td>
<td><fmt:formatDate value="${worker.dbirth}" pattern="dd.MM.yyyy" /> </td>
<td><a href="${edit_url}">Edit</a></td>
<td><a href="db_editor/worker/delete/${worker.id}">Delete</a></td>
</tr>
</c:forEach>
</table>
</div>
</c:if>
</div>
控制器:
import ..
@Controller
@RequestMapping("/db_editor")
public class DBEditorController_test {
private WorkerService workerService;
private TabelService tabelService;
@Inject
public DBEditorController_test(WorkerService workerService, TabelService tabelService) {
this.workerService = workerService;
this.tabelService = tabelService;
}
@RequestMapping(method = RequestMethod.GET)
public String getWorkers(Model model) {
model.addAttribute("worker", new Worker());
model.addAttribute("tabel", new Tabel());
model.addAttribute("workerList", this.workerService.listWorker());
return "db_editor";
}
@RequestMapping(value = "/worker/add", method = RequestMethod.POST)
public String addWorkerFromForm(Worker worker) {
workerService.addWorker(worker);
return "redirect:/db_editor";
}
@RequestMapping("/worker/delete/{workerId}")
public String delWorker(@PathVariable("workerId") Long workerId) {
workerService.deleteWorker(workerId);
return "redirect:/db_editor";
}
@RequestMapping(value=("/worker/edit/{workerId}"), method = RequestMethod.GET)
public String editWorker(@PathVariable("workerId") Long workerId, Model model) {
Worker worker = workerService.getWorkerById(workerId);
model.addAttribute(worker);
return "db_editor";
}
@RequestMapping(value = "/tabel/add", method = RequestMethod.POST)
public String addOneDayForTabel (Tabel tabel) {
tabel.setWorker(workerService.getWorkerById(2L));
tabelService.addTabel(tabel);
return "redirect:/db_editor";
}
}
模型:
Worker.java
@Entity
@Table(name="workers")
public class Worker {
@Id
@Column(name = "id")
@GeneratedValue
private Long id;
@Column(name = "fam")
private String fam;
@Column(name = "imj")
private String imj;
@Column(name = "otch")
private String otch;
@Column(name = "dbirth")
private Date dbirth;
/*getters and setters*/
}
Tabel.java
@Entity
@Table(name="tabel")
public class Tabel {
@Id
@Column(name = "id")
@GeneratedValue
private Long id;
@Column(name = "d")
private Date d;
@Column(name = "d_type")
private String d_type;
@ManyToOne
@JoinColumn(name="worker_id")
private Worker worker;
/*getters and setters*/
}
完整堆棧跟蹤:在您的控制器
HTTP Status 500 - Request processing failed; nested exception is org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/views/main_template.jsp'.
type Exception report
message Request processing failed; nested exception is org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/views/main_template.jsp'.
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/views/main_template.jsp'.
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/views/main_template.jsp'.
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:680)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:633)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:322)
org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
org.apache.tiles.util.TilesIOException: ServletException including path '/WEB-INF/views/main_template.jsp'.
org.apache.tiles.servlet.context.ServletUtil.wrapServletException(ServletUtil.java:232)
org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:243)
org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222)
org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44)
org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:678)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:633)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:322)
org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
javax.servlet.ServletException: org.apache.tiles.jsp.taglib.TilesJspException: IO Error executing tag: JSPException including path '/WEB-INF/views/db_editor.jsp'.
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:906)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
org.apache.jsp.WEB_002dINF.views.main_005ftemplate_jsp._jspService(main_005ftemplate_jsp.java:223)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241)
org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222)
org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44)
org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:678)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:633)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:322)
org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
org.apache.tiles.util.TilesIOException: JSPException including path '/WEB-INF/views/db_editor.jsp'.
org.apache.tiles.servlet.context.ServletUtil.wrapServletException(ServletUtil.java:232)
org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:105)
org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96)
org.apache.tiles.renderer.impl.UntypedAttributeRenderer.write(UntypedAttributeRenderer.java:61)
org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:337)
org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:234)
org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:211)
org.apache.tiles.jsp.taglib.RenderTag.doEndTag(RenderTag.java:220)
org.apache.jsp.WEB_002dINF.views.main_005ftemplate_jsp._jspx_meth_t_005finsertAttribute_005f0(main_005ftemplate_jsp.java:271)
org.apache.jsp.WEB_002dINF.views.main_005ftemplate_jsp._jspService(main_005ftemplate_jsp.java:159)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241)
org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222)
org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44)
org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:678)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:633)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:322)
org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'tabel' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:174)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:194)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:160)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:147)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:138)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:122)
org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:408)
org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:140)
org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
org.apache.jsp.WEB_002dINF.views.db_005feditor_jsp._jspx_meth_sf_005finput_005f3(db_005feditor_jsp.java:630)
org.apache.jsp.WEB_002dINF.views.db_005feditor_jsp._jspx_meth_sf_005fform_005f1(db_005feditor_jsp.java:587)
org.apache.jsp.WEB_002dINF.views.db_005feditor_jsp._jspService(db_005feditor_jsp.java:317)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:945)
org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:679)
org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:673)
org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:103)
org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96)
org.apache.tiles.renderer.impl.UntypedAttributeRenderer.write(UntypedAttributeRenderer.java:61)
org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:337)
org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:234)
org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:211)
org.apache.tiles.jsp.taglib.RenderTag.doEndTag(RenderTag.java:220)
org.apache.jsp.WEB_002dINF.views.main_005ftemplate_jsp._jspx_meth_t_005finsertAttribute_005f0(main_005ftemplate_jsp.java:271)
org.apache.jsp.WEB_002dINF.views.main_005ftemplate_jsp._jspService(main_005ftemplate_jsp.java:159)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241)
org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222)
org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44)
org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:678)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:633)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:322)
org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
alfcope,你最好的!!! 但我不明白爲什麼我的示例不起作用;) – Genka
因爲模型中的屬性僅適用於當前請求,因爲它們被認爲是用於視圖。每當你提出請求時,模型都會被初始化,並且它將被清空。您需要再次添加屬性。這就是'@ ModelAttribute'的作用。你的方法不是將'tabel'屬性添加到模型中,而是返回的視圖需要它,只有'getWorkers'。看看文檔:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-modelattrib-methods – alfcope
我意識到,爲了讓我的例子你需要在'editWorker'方法中添加一個'model.addAttribute(「tabel」,新的Tabel());'。再次感謝! – Genka