web-dev-qa-db-ja.com

org.Apache.jasper.JasperException:/WEB-INF/views/home.jsp(行:[25]、列:[1])属性のセッターメソッドが見つかりません:[commandName]

スプリングフォームを作成しました。これを送信し、別のjspページを表示します。このプロジェクトを実行すると、次の例外が発生します。誰も私がこのエラーを受け取っている理由を理解するのに役立ちますか?.

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;
    }
}
16
Swetamber

どのバージョンのSpring MVCを使用していますか?私は同じ問題を抱えていました。

グループID:org.springframeworkアーティファクトID:spring-webmvcバージョン:5.0.2.RELEASE

バージョン5のcommandNameが削除された後、代わりにmodelAttributeを使用する必要があります。ここで見つけました https://jira.spring.io/browse/SPR-16037

ModelNameでcommandNameを変更しただけです。

<form:form modelAttribute="goal">
50
Oguz

1 ...古い方法= commandName

<form:form action="index" commandName="todo">

2 ...新しい方法= modelAttribute

  <form:form action="index" modelAttribute="todo">

commandNameは古い方法であり、新しいアプリケーションではmodelAttributeを使用する必要があります

4
chandra mohan

commandName =このフォームに関する情報を含むリクエストスコープまたはセッションスコープ内の変数の名前、それは以前のはずです。

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

<form:form commandName = "xy"とのスプリング注釈関係

フォームでjspファイルを表示する(返す)GETcustomerメソッドで、次のようなモデル属性を追加します。

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

}

その後、フォームが正しく表示されるかどうかを試してください。

1
Sumit Badaya

属性のセッターメソッドが見つかりません:[commandName] t

この例外では、Spring Containerは、jspフォームタグで「commandName」または「modelAttribute」として使用した名前、その属性はどのDomain(Class)に属しているかを知りたいと思っています。つまり、commandName="customer"顧客はinstanceOf顧客モデルクラスです。または、その他のインスタンスです。そのため、Springコンテナを確保するには、HomePageのHomeControllerで表示するモデルを送信する必要があります。次のようにします。

import org.springframework.ui.Model;
@Controller
public class HomeController {

    @RequestMapping("/")
    public String welcomePage(Model model)
    {
        /* i am not sure what would be youe Model name for customer change that accord to your model name */
        Customer customerInstance = new Customer();
        model.addAttribute("customer", customerInstance);
        return "home";
    }
}

そこには、モデル属性に2つのパラメーターを追加できます。

  1. 属性名、つまり顧客
  2. オブジェクト名、つまりcustomerInstance

モデルは、Spring APIライブラリの一部であるインターフェースですモデルインターフェース簡単に言えば、モデルはビューのレンダリングに使用される属性を提供できます。
ビューに使用可能なデータを提供するには、このデータをそのModelオブジェクトに追加するだけです。さらに、属性を持つマップをモデルインスタンスとマージできます。 詳細については、このリンクにアクセスしてください

0
nSense

HomeController.Javaで、次のように関連するモデルでフォームビューを表示する必要があります。

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

また、spring-webmvc 5または最新バージョンを使用している場合は、必ずcommandName="customer" with modelAttribute="customer"。これで問題が解決することを願っています。

0
Azhar Zafar