第二个(重定向的)JSP页面上的model属性不工作,抛出错误-Spring MVC
我的欢迎页面是Login.jsp。在提交时,它重定向到另一个页面,该页面登记登录用户的虚拟事务详细信息。 但是,当我尝试在第二个页面中添加带有model属性的表单时,它会抛出一个错误 Login.jsp-表单位代码 这段代码与表单一起工作-它登记了我在上面的屏幕截图中显示的所有数据。但是,它会在FormModelAttribute中抛出一个错误。请注意,两种形式的模型属性不同,绑定不同的表。 抛出错误:第二个(重定向的)JSP页面上的model属性不工作,抛出错误-Spring MVC,spring,spring-mvc,Spring,Spring Mvc,我的欢迎页面是Login.jsp。在提交时,它重定向到另一个页面,该页面登记登录用户的虚拟事务详细信息。 但是,当我尝试在第二个页面中添加带有model属性的表单时,它会抛出一个错误 Login.jsp-表单位代码 这段代码与表单一起工作-它登记了我在上面的屏幕截图中显示的所有数据。但是,它会在FormModelAttribute中抛出一个错误。请注意,两种形式的模型属性不同,绑定不同的表。 抛出错误: root cause java.lang.IllegalStateExceptio
root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'trans' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)
org.springframework.web.servlet.tags.form.LabelTag.autogenerateFor(LabelTag.java:129)
org.springframework.web.servlet.tags.form.LabelTag.resolveFor(LabelTag.java:119)
org.springframework.web.servlet.tags.form.LabelTag.writeTagContent(LabelTag.java:89)
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.save_jsp._jspx_meth_form_005flabel_005f0(save_jsp.java:208)
org.apache.jsp.WEB_002dINF.views.save_jsp._jspx_meth_form_005fform_005f0(save_jsp.java:153)
org.apache.jsp.WEB_002dINF.views.save_jsp._jspService(save_jsp.java:93)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
那么,这是否意味着重定向页面不能具有与绑定另一组数据的调用页面不同的模型
谢谢。我在您的控制器中的任何地方都看不到传递到您的模型中的属性user和trans。您的modelAttribute视图似乎期望它们,这就是您收到此错误的原因 另外,如果您只提供与POST方法相关联的GET方法处理程序,那么查看GET方法处理程序也会很好 我可能没有理解您试图实现的目标,但是每个视图都会呈现您为其提供的模型属性 如果我为控制器提出以下建议,是否有帮助
@RequestMapping(value = "/login2", method = RequestMethod.GET)
public ModelAndView login(ModelMap model) {
model.put("user", new UserBean(0, "", ""));
return new ModelAndView("Login", model);
}
@RequestMapping(value = "/login2", method = RequestMethod.POST)
public ModelAndView loginPost( @ModelAttribute("user") UserBean u1, ModelMap model, BindingResult result) {
List<TransactionBeans> lst = service.getAll();
model.put("t1", lst);
//Display default transaction
model.put("trans", new TransactionBeans(0, 0));
return new ModelAndView("save", model);
}
@RequestMapping(value = "/saveTransaction", method = RequestMethod.POST)
public ModelAndView saveTransaction(TransactionBeans t1, ModelMap model,BindingResult result) {
service.save(t1);
List<TransactionBeans> lst = service.getAll();
model.put("t1", lst);
model.put("trans", t1);
return new ModelAndView("save", model);
}
@RequestMapping(value = "/edit", method = RequestMethod.GET)
public ModelAndView edit(@RequestParam("id") String transactionId, ModelMap model) {
TransactionBeans trans = service.get(transactionId);
List<TransactionBeans> lst = service.getAll();
model.put("t1", lst);
model.put("trans", trans);
return new ModelAndView("save", model);
}
祝你好运嗨,亚历克斯,谢谢你的回复。正如您所说,我已经将JSP页面中的数据绑定到相应的控制器方法“public ModelAndView login@ModelAttributeuser”和“public ModelAndView saveTransaction@ModelAttributetrans”中。第一级模型映射工作正常2,但第二页模型不工作。如果我从第二个redirected save.jsp中删除表单,我会在jsp表中获得完整的表单登记虚拟事务数据。屏幕截图嵌入到原始ost中的link语句中。请查看此图像链接以查看登录流。但是如果使用相同的方法尝试绑定第二个页面redirected save.jsp数据,它会抛出错误。如果绑定方法是错误的,那么它不应该在第一级登录页面工作,但它在那里工作。我已经按照您的建议做了,只是出于安全原因,我没有get处理程序方法。谢谢。您一定在流中的某个地方缺少@ModelAttributeuser,否则第1页也无法工作。请查看:,了解他们如何创建用于创建全局绑定的GetAllAddresss方法。我相信你应该有一个类似的方法为您登录的用户第一页的作品,第二页不,在第二页,我不需要任何用户数据,我只需要从第二页显示交易id列表交易数据。。。。我发了一条信息。谢谢,我还在努力,将通过博客。。非常感谢。
<form:form method="POST" action="saveTransaction.html" modelAttribute="trans" id="form">
<table>
<tr>
<td><form:label path="transaction_id">Transaction ID:</form:label></td>
<td><form:input path="transaction_id" value="${i.transaction_id}" readonly="true"/></td>
</tr>
<tr>
<td><form:label path="user_id">User ID:</form:label></td>
<td><form:input path="user_id" value="${i.user_id}"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Submit"/></td>
</tr>
</table>
</form:form>
<c:if test="${!empty t1}">
<table align="left" border="1">
<tr>
<th>transaction ID</th>
<th>User ID</th>
</tr>
<c:forEach var="i" items="${t1}">
<tr>
<td><c:out value="${i.transaction_id}"/></td>
<td><c:out value="${i.user_id}"/></td>
<td align="center"><a href="edit.html?id=${i.transaction_id}">Edit</a> | <a href="delete.html?id=${i.transaction_id}">Delete</a></td>
</tr>
</c:forEach>
</table>
</c:if>
@RequestMapping(value = "/saveTransaction", method = RequestMethod.POST)
public ModelAndView saveTransaction( @ModelAttribute("trans") TransactionBeans t1, BindingResult result) {
/* some code */
/* lst is a list<TransactionDetails>*/
model.put("t1", lst);
return new ModelAndView("save", model);
}
public class TransactionBeans implements Serializable{
int user_id, transaction_id;
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public int getTransaction_id() {
return transaction_id;
}
public void setTransaction_id(int transaction_id) {
this.transaction_id = transaction_id;
}
}
root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'trans' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)
org.springframework.web.servlet.tags.form.LabelTag.autogenerateFor(LabelTag.java:129)
org.springframework.web.servlet.tags.form.LabelTag.resolveFor(LabelTag.java:119)
org.springframework.web.servlet.tags.form.LabelTag.writeTagContent(LabelTag.java:89)
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.save_jsp._jspx_meth_form_005flabel_005f0(save_jsp.java:208)
org.apache.jsp.WEB_002dINF.views.save_jsp._jspx_meth_form_005fform_005f0(save_jsp.java:153)
org.apache.jsp.WEB_002dINF.views.save_jsp._jspService(save_jsp.java:93)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
@RequestMapping(value = "/login2", method = RequestMethod.GET)
public ModelAndView login(ModelMap model) {
model.put("user", new UserBean(0, "", ""));
return new ModelAndView("Login", model);
}
@RequestMapping(value = "/login2", method = RequestMethod.POST)
public ModelAndView loginPost( @ModelAttribute("user") UserBean u1, ModelMap model, BindingResult result) {
List<TransactionBeans> lst = service.getAll();
model.put("t1", lst);
//Display default transaction
model.put("trans", new TransactionBeans(0, 0));
return new ModelAndView("save", model);
}
@RequestMapping(value = "/saveTransaction", method = RequestMethod.POST)
public ModelAndView saveTransaction(TransactionBeans t1, ModelMap model,BindingResult result) {
service.save(t1);
List<TransactionBeans> lst = service.getAll();
model.put("t1", lst);
model.put("trans", t1);
return new ModelAndView("save", model);
}
@RequestMapping(value = "/edit", method = RequestMethod.GET)
public ModelAndView edit(@RequestParam("id") String transactionId, ModelMap model) {
TransactionBeans trans = service.get(transactionId);
List<TransactionBeans> lst = service.getAll();
model.put("t1", lst);
model.put("trans", trans);
return new ModelAndView("save", model);
}