2017-10-28 561 views
2

我已经创建了一个弹簧表单,并希望从此提交并显示另一个jsp页面。当我运行这个项目时,我得到下面的异常。任何人都可以帮助我理解为什么我得到这个错误。org.apache.jasper.JasperException:/WEB-INF/views/home.jsp(行:[25],柱:[1])无法找到属性setter方法:[命令名]

org.apache.jasper.JasperException: /WEB-INF/views/home.jsp (line: [25], column: [1]) Unable to find setter method for attribute: [commandName] 
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42) 
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:292) 
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:115) 
    org.apache.jasper.compiler.Generator$GenerateVisitor.evaluateAttribute(Generator.java:2998) 
    org.apache.jasper.compiler.Generator$GenerateVisitor.generateSetters(Generator.java:3218) 
    org.apache.jasper.compiler.Generator$GenerateVisitor.generateCustomStart(Generator.java:2404) 
    org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1894) 
    org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1544) 
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2389) 
    org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2441) 
    org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2447) 
    org.apache.jasper.compiler.Node$Root.accept(Node.java:470) 
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2389) 
    org.apache.jasper.compiler.Generator.generate(Generator.java:3657) 
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:256) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:384) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:361) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:345) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) 
    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:741) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:170) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:312) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1325) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1069) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1008) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 

JSP文件:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ page session="false" %> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<html> 
<head> 
    <title>Home</title> 
    <style> 
.error { 
    color: #ff0000; 
} 

.errorblock { 
    color: #000; 
    background-color: #ffEEEE; 
    border: 3px solid #ff0000; 
    padding: 8px; 
    margin: 16px; 
} 
</style> 
</head> 
<body> 
<h2>Spring's form textbox example</h2> 

    <form:form method="POST" action="/customer" commandName="customer"> 
     <form:errors path="*" cssClass="errorblock" element="div" /> 
     <table> 
      <tr> 
       <td>Username :</td> 
       <td><form:input path="userName" /> 
       </td> 
       <td><form:errors path="userName" cssClass="error" /> 
       </td> 
      </tr> 
      <tr> 
       <td colspan="3"><input type="submit" /> 
       </td> 
      </tr> 
     </table> 
    </form:form> 

</html> 

当我用简单的HTML表单,然后它工作正常,但如果我这样做,通过弹簧的形式同样的事情它给人的错误。

控制器类:

@Controller 
public class HomeController { 


    @RequestMapping("/") 
    public String welcomePage() 
    { 
     return "home"; 
    } 


    @RequestMapping(value="/customer", method=RequestMethod.POST) 
    public ModelAndView submitForm(@RequestParam("userName") String name) 
    {  
     ModelAndView mv = new ModelAndView("success"); 
     mv.addObject("userName", name); 
     return mv; 
    } 
} 
+0

显示需要提交表单的'/ customer'代码 –

+0

我添加了我的控制器类。除了它,我有一个属性userName和他们的setter和getter方法一个Customer.java文件。 - @KavishMittal – Swetamber

+1

你不采取'customer'在您的控制器参数: '公共的ModelAndView submitForm(@RequestParam( “username” 的)字符串名称)'这里。因此,它显示我是新来春错误 –

回答

0

commandName =在于contaisn关于这种形式的信息的请求范围或会话范围的变量的名称,它应该是一个过。

参考文献:http://forum.spring.io/forum/spring-projects/web/59966-exact-meaning-of-form-form-commandname

Spring annotation relation with <form:form commandName="xy"

在你的customer它显示(返回)JSP文件与表格GET方法,添加模型属性是这样的:

@RequestMapping(value="/customer", method=RequestMethod.GET) 
    public ModelAndView showForm(Model model) { 
     model.addAttribute("customer",new Customer()); 

} 

然后尝试,如果它正确显示表单。

是否使用的是Spring MVC的版本
1

?我有同样的问题,与Maven的依赖是,

组ID:org.springframework 工件ID:弹簧webmvc 版本:5.0.2.RELEASE

5版本后,命令名被删除,你应该使用的ModelAttribute,来代替。 我在这里找到它,https://jira.spring.io/browse/SPR-16037

我只是用modelAttribute更改了commandName。

<form:form modelAttribute="goal"> 
相关问题