0

環境: SpringMVC Maven Netbeans Glassfish

SEVERE: Bean 名 'user' の BindingResult もプレーン ターゲット オブジェクトも要求属性として使用できません.BindStatus.(BindStatus.java:141) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178) で org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath( org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag の org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:164) のautogenerateId(AbstractDataBoundFormElementTag.java:151) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:142) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag. java:126) org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421) で org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142) でorg.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102) で org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79) で org.apache.jsp .user_jsp._jspx_meth_form_input_0(user_jsp.java:178) org.apache.jsp.user_jsp._jspx_meth_form_form_0(user_jsp.java:120) で org.apache.jsp.user_jsp._jspService(user_jsp.java:76) で org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase) .java:111) で javax.servlet.http.HttpServlet.service(HttpServlet.java:847) で org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403) で org.apache.jasper.servlet. org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378) の JspServlet.serviceJspFile(JspServlet.java:492) org.apache の javax.servlet.http.HttpServlet.service(HttpServlet.java:847) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) の .catalina.core.StandardWrapper.service(StandardWrapper.java:1539) org.apache.catalina.core.StandardContextValve.org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) の invoke(StandardContextValve.java:175) com.sun の org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) .enterprise.web.WebPipeline.invoke(WebPipeline.java:98) com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java) :162) org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) で org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) で com.sun.enterprise.v3。 services.impl.ContainerMapper.service(ContainerMapper.java:174) com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) ) com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) で com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) で com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask. java:59) com.sun.grizzly.ContextTask.run(ContextTask.java:71) で、com.sun.grizzly.util で。AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722)

ユーザー.jsp:

    <form:form action="createuser.do" modelAttribute="user" method="POST">
        <table align="center" >
            <tr>
                <td>User Name :</td>
                <td><form:input path="userName"/></td>
            </tr>
            <tr>  
                <td><input type="submit" value="Submit" /></td>
            </tr>
        </table>
    </form:form>

私のコントローラー:

@Controller
public class UserController {
    @RequestMapping(value = "/createuser.do", method = RequestMethod.POST)
    public void create(@ModelAttribute("user")  User user, BindingResult result) {
        System.out.print("user name: "+user.getUserName());
    }
}

「http://localhost:8080/NBGFMN/user.jsp」にアクセスすると、ブラウザでこのエラーが発生しました

jsp から )を削除するform:input path="userName"と、送信ボタンをクリックすると jsp が正しく表示され、コンソールは「ユーザー名: null」を出力します。

この同じエラーについてstackoverflowには非常に多くの投稿がありますが、解決策はどれもうまくいきません。

以下のGETメソッドとwelcome.jspを追加しました

@RequestMapping(value = "/welcome.do", method = RequestMethod.GET)
public ModelAndView printHello()
{
    ModelAndView m = new ModelAndView("welcome");
    m.addObject("ppp", "hello");
    return m;
}

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <c:out value="${ppp}" ></c:out>
    </body>
</html>

そして「http://localhost:8080/NBGFMN/welcome.do」にアクセスすると問題なく動作します。

次の GET (ユーザーを作成するため) を追加すると、機能します。

@RequestMapping(value = "/createuser.do", method = RequestMethod.GET)
public String create(ModelMap mm) 
{
    mm.addAttribute("auser", new User("Andy"));
    return "welcome";
}

<body>
    <c:out value="${auser.userName}" ></c:out>
</body>

「http://localhost:8080/NBGFMN/createuser.do」にアクセスすると、ブラウザは「Andy」を出力します

しかし、フォーム POST はまだ機能していません。

4

2 に答える 2

0

この文脈で私がしなければならない2つの重要なポイントがあります:

  1. BindingResult@ModelAttribute即時エントリに関連付けられている
  2. エラーを報告するときは、それをモデル属性に関連付けます。この属性名は に存在する必要があり@ModelAttribute、大文字と小文字が区別されます。

サンプル:

@ModelAttribute("side") SideDetails s,BindingResult sideResult          
@ModelAttribute("track") TrackDetails t, BindingResult trackResult

上記の例でsideResultは、ターゲットは になりSideDetailsます。同様に、ターゲットとしてtrackResult持ちます。TrackDetails

でエラーを報告している間sideResult、属性名はモデルで検索されますSideDetails。この属性が見つからない場合、このブログで報告されたエラーが表示されます。

お役に立てれば。

于 2013-09-17T00:07:03.817 に答える
0

field を含むオブジェクトのGET名前と値を使用して、ハンドラーにリクエスト属性を設定しようとしましたか? このような:useruserName

@Controller
public class UserController {

    @RequestMapping(value = "/createuser.do", method = RequestMethod.GET)
    public void create(ModelMap mm) {
        mm.addAttribute("user", new UserFormObject());
    }

    @RequestMapping(value = "/createuser.do", method = RequestMethod.POST)
    public void create(@ModelAttribute("user") User user, BindingResult result) {
        System.out.print("user name: "+user.getUserName());
    }
}

JSPでは、要素に指定method=postする必要があります。デフォルトのメソッドはで、ハンドラーと一致しません。form:formGET

于 2012-07-20T13:55:29.863 に答える