2014-10-22 71 views
1

我正嘗試使用spring mvc讀取從窗體輸入到另一個jsp頁面的值,但不使用註釋。雖然這樣做我得到這個錯誤: 無論BindingResult也不平原目標對象的bean名「用戶」可以作爲請求屬性 我的控制器類代碼如下:** BindingResult和bean名稱'user'的普通目標對象都沒有作爲請求屬性**

public class UserFormController extends SimpleFormController { 


    public UserFormController() 
    { 
     setCommandClass(User.class); 

    } 

    protected ModelAndView onSubmit(Object command) throws Exception { 

     User user = (User) command; 

     return new ModelAndView("userDetails", "user", user); 

    } 

} 

我的POJO的代碼是:

public class User { 
    String name; 
    String gender; 
    String[] subject; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getGender() { 
     return gender; 
    } 
    public void setGender(String gender) { 
     this.gender = gender; 
    } 
    public String[] getSubject() { 
     return subject; 
    } 
    public void setSubject(String[] subject) { 
     this.subject = subject; 
    } 
} 

窗體的代碼是:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<form:form method="POST" commandName="user" action="/abc.htm"> 
<table> 
<tr> 
    <form:input path="name" /> 
</tr> 
<tr> 
    <form:radiobutton label="M" value="male" path="gender"/> 
    <form:radiobutton label="F" value="female" path="gender"/> 
</tr> 
<tr> 
    <form:checkbox label="maths" value="maths" path="subject"/> 
    <form:checkbox label="english" value="english" path="subject"/> 
</tr> 
</table> 
<input type="submit" value="submit"> 
</form:form> 
</body> 
</html> 

我歡迎PAG e是redirect.jsp從我重定向到redirection.jsp並使用web.xml我將控件發送到名爲「disp」的servlet。對於 「DISP-servlet.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:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 


<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/> 

    <bean name="/redirection.htm" 
      class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
     <property name="viewName" value="entry" /> 
    </bean> 


<bean name="/abc.htm" class="UserFormController"/> 
</beans> 

通過 'ParameterizableViewController的' 我試圖重定向到WEB-INF/jsp的文件夾中entry.jsp請求。然後我試圖在「userDetails.jsp」顯示詳細信息:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<table> 
<tr> 
user name:${user.name} 
</tr> 
<tr> 
user gender:${user.gender} 
</tr> 
<tr> 
user subjects:${user.subjects[0]},${user.subjects[1]} 
</tr> 
</table> 
</body> 
</html> 

的錯誤我得到的是:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute 
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141) 
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:175) 
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:195) 
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:161) 
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:148) 
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:139) 
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:123) 
org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:409) 
org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:140) 
org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:91) 
org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:78) 
org.apache.jsp.WEB_002dINF.jsp.entry_jsp._jspx_meth_form_005finput_005f0(entry_jsp.java:184) 
org.apache.jsp.WEB_002dINF.jsp.entry_jsp._jspx_meth_form_005fform_005f0(entry_jsp.java:125) 
org.apache.jsp.WEB_002dINF.jsp.entry_jsp._jspService(entry_jsp.java:84) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:239) 
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

回答

1

根據堆棧跟蹤,在呈現發生錯誤的視圖名爲entry.jsp。我認爲這是你在上面展示的形式。

標籤<form:form method="POST" commandName="user" action="/abc.htm">搜索名稱爲user(這是正常的)的請求屬性,並且找不到(因此錯誤)。

一種形式,通常這樣進行處理:

  • 瀏覽器發出一個GET請求到應用
  • 應用程序生成併發送包含表格的HTML頁面
  • 瀏覽器發出表單數據POST請求
  • 應用程序處理的表單數據和重定向到另一個URL

喲在階段2中發生你的錯誤:應用程序產生一個HTML頁面,因爲那時你沒有請求屬性。

你應該做的:

  • 忘了棄用(因爲3.0)SimpleFormController和使用註釋控制器這是明確簡單和更強大 - 你會發現周圍
  • 如果你不能(春季大量的實例2.5或java 1。4但是這是非常老unmaintened),至少通過設定formViewentry.jsp和實施referenceData方法返回地圖{ "user" : new User() }

編輯使用 UserFormController製備視圖,通過實施showForm方法或

的註解控制器可能看起來像:

@Controller 
public class UserFormController { 

    @RequestMapping("/redirection") 
    public String show(Model model) { 
     model.addAttribute("user", new User()); 
     return "entry"; 
    } 

    @RequestMapping("/abc") 
    protected String submit(@ModelAttribute("user") User user) { 
     return "userDetails"; 
    } 
} 
+0

即使有註解,我得到同樣的埃羅r – 2014-10-22 12:41:50

+0

早些時候,我使用了「setCommandClass」,而不是使用註釋進行編碼時應該使用什麼? – 2014-10-22 12:58:15

相關問題