Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 控制器中未检测到freemarker形式的弹簧绑定_Java_Spring_Spring Mvc_Freemarker - Fatal编程技术网

Java 控制器中未检测到freemarker形式的弹簧绑定

Java 控制器中未检测到freemarker形式的弹簧绑定,java,spring,spring-mvc,freemarker,Java,Spring,Spring Mvc,Freemarker,我有一份声明如下的表格: <form id="reply-form-frm" novalidate="novalidate" action="/reply/responsive" method="POST"> [@spring.bind "model.form"/] [@spring.bind "model.form.message" /] <label for="${spr

我有一份声明如下的表格:

  <form id="reply-form-frm" novalidate="novalidate" action="/reply/responsive" method="POST">
                [@spring.bind "model.form"/]

                [@spring.bind "model.form.message" /]

                <label for="${spring.status.expression}" class="clearfix" data-error="Please enter a message">
                    <span class="label-text">Your message</span>
                    <span class="set-right required-flag">Required</span>
                </label>

                <p class="input-error[#if spring.status.errorMessages?size > 0] reveal-error[#else] hide-error[/#if]">
                    [#if spring.status.errorMessages?size > 0]
                      <span>[#list spring.status.errorMessages as error]${error}[/#list]</span>
                    [/#if]
                </p>
                [@spring.formTextarea "model.form.message", 'aria-required="true" required="required" data-clear="true"' /]
   </form>
我的控制器具有以下映射方法:

 public ModelAndView sendReplyResponsive(@ModelAttribute("model.form") ReplyForm replyForm,
                                            BindingResult bindingResult) {
    //TODO: content irrelevant ...
 }
问题是当表单呈现时,元素映射到“form.message”而不是“model.form.message”,并且我的控制器在post上找不到ReplyForm对象


你知道如何强制Spring使用“model.form.message”作为名称吗?

简短回答-不可能强制Spring使用“model.form.message”作为名称

长答覆: Spring总是去掉名称的第一部分(“在您的例子中是model”),它不依赖于表示引擎。此逻辑在
org.springframework.web.servlet.support.BindStatus#BindStatus
中编码。常见的方法是使用相同的模型进行渲染和绑定,在这种情况下,您应该:
1.使用“模型”类进行绑定:

public ModelAndView sendReplyResponsive(@ModelAttribute("model") ReplyModel model, BindingResult bindingResult) {
    ReplyForm replyForm = model.getForm();
    //TODO: content irrelevant ...
}
或2。将ReplyForm作为独立模型属性公开:

<form id="reply-form-frm" novalidate="novalidate" action="/reply/responsive" method="POST">
    [@spring.bind "form.message" /]

    <label for="${spring.status.expression}" class="clearfix" data-error="Please enter a message">
        <span class="label-text">Your message</span>
        <span class="set-right required-flag">Required</span>
    </label>

    <p class="input-error[#if spring.status.errorMessages?size > 0] reveal-error[#else] hide-error[/#if]">
        [#if spring.status.errorMessages?size > 0]
          <span>[#list spring.status.errorMessages as error]${error}[/#list]</span>
        [/#if]
    </p>
    [@spring.formTextarea "form.message", 'aria-required="true" required="required" data-clear="true"' /]
</form>
如果您的“模型”只包含表单,则没有理由保留它。 控制器方法为:

public ModelAndView sendReplyResponsive(@ModelAttribute("form") ReplyForm replyForm,
                                            BindingResult bindingResult) {
    //TODO: content irrelevant ...
}
model: {
  form: {
    senderName: "hahahahaha",
    senderEmail: "asd@asd.es",
    advertId: 1000011793,
    optInMarketing: false,
    advertClickSource: "natural"
    }
},
form: {
    senderName: "hahahahaha",
    senderEmail: "asd@asd.es",
    advertId: 1000011793,
    optInMarketing: false,
    advertClickSource: "natural"
}
public ModelAndView sendReplyResponsive(@ModelAttribute("form") ReplyForm replyForm,
                                            BindingResult bindingResult) {
    //TODO: content irrelevant ...
}