当前位置: 首页 > 知识库问答 >
问题:

Spring@ModelAttribute不工作

颛孙镜
2023-03-14

我有一个控制器,我把get和post方法都放在其中。这两种方法都很好,但当我将@ModelAttribute注释引入POST方法时,它开始给我状态400——客户端发送的请求在语法上不正确。

我不知道我做错了什么。视图看起来像:

<form:form method="post" action="createIdeaPublic" commandName="idea">
    <table class="form">
        <tr>
            <td align="right"><label for="title">Idea Title</label></td><td align="left"><form:input type="text" path="title" id="title"></form:input></td>
            <td align="right"><label for="email">Your Email</label></td><td align="left"><form:input type="text" path="requestorEmail" id="requestorEmail" class="emails"></form:input></td>
        </tr>


        <tr>
            <td align="right"><label for="partnerEmail">CI Contact Email</label></td><td align="left"><form:input type="text" path="cIInitialContact" id="cIInitialContact" class="emails"></form:input></td>
            <td align="right"><label for="sponsorEmail">Sponsor Email</label></td><td align="left"><form:input type="text" path="sponsorEmail" id="sponsorEmail" class="emails"></form:input></td>

        </tr>


        <tr>
            <td align="right"><label for="requestedDeliveryDate">Requested Delivery Date</label></td><td align="left"><form:input type="text" path="requestedDeliveryDate" id="requestedDeliveryDate" class="datepicker"></form:input></td>
            <td align="right"><label>Classification</label></td><td align="left">

                <label for="discretionary" class="radio">Discretionary</label>
                <form:radiobutton path="stateDescription" id="discretionary" value="Discretionary"></form:radiobutton>
                <label for="mandatory" class="radio">Mandatory</label>
                <form:radiobutton path="stateDescription" id="mandatory" value="Mandatory"></form:radiobutton>
                <label for="regulatory" class="radio">Regulatory</label>
                <form:radiobutton path="stateDescription" id="regulatory" value="Regulatory"></form:radiobutton>
            </td>
        </tr>

        <tr>
            <td colspan="4" align="right"><input type="submit" class="ui ui-button ui-corner-all ui-widget" style="margin-top: .6em; margin-right: 1em;font-weight: bold;font-size: 1.2em; width: 150px;" value="Create Idea" /></td>
        </tr>
    </table>
</form:form>

我尝试将命令名称=“想法”更改为模型属性=“想法”,但没有好处。

Spring控制器看起来像

@Controller
@RequestMapping ("/createIdeaPublic")
public class CreateIdeaPublicController{


   @RequestMapping(method = RequestMethod.GET)
   public ModelAndView view(ModelMap model) {
      model.addAttribute("areas",Utils.areas);
      return new ModelAndView("createIdeaPublic", "idea", new Idea());
   }


   @RequestMapping(method = RequestMethod.POST)
   public String submit(@ModelAttribute("idea")Idea idea, ModelMap model) {

//     System.out.println(idea.getTitle());
       System.out.println("Hello World");
      return "redirect:createIdeaPublic";
   }

} 

但是一旦我从submit方法中删除了@ model attribute(" Idea ")Idea Idea,表单提交就开始工作了。

共有1个答案

徐柏
2023-03-14

我想出来了。日期字段有问题。如果我不在日期字段中输入值,我会得到400页。这是我在Controller类中所做的。如果您有此问题,请原样复制(只需相应更改日期格式)。

@InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        dateFormat.setLenient(false);

        // true passed to CustomDateEditor constructor means convert empty String to null
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }
 类似资料:
  • 当登录失败时,我试图重定向登录页面上输入的用户名,但在我的控制器中,从“@modelattribute(”user“)”检索的用户的用户名为空。当我不使用spring security时,这是有效的。 我假设form实际上首先发送到spring security,然后重定向到控制器,因此在spring security之间输入的信息丢失。 编辑(解决方案): 谢谢。@James创建一个failur

  • 如果我错了请纠正我。两者都可以用于数据绑定。 谢谢!!

  • 最近我正在努力学习SpringMVC。似乎我没有很好地理解@SessionAttributes和@ModelAttribute注释的功能。 这是我的控制器的一部分: 基本上有一个jsp列出所有的项目。用户点击"addToCart"获取特定商品,该商品将被添加到购物车列表中。我最好先解释一下我对这个控制器的理解,你可以告诉我我没有得到什么。 第一次调用ItemController时,将执行creat

  • 问题内容: Spring MVC 的目的和用途是什么? 问题答案: 引用模型对象的属性(MVC中的M;),所以我们假设有一个表单,该表单带有一个称为“ Person”的表单支持对象。然后,你可以让Spring MVC通过使用批注将此对象提供给Controller方法: 另一方面,注释用于定义应作为模型一部分的对象。因此,如果要在模型中引用Person对象,可以使用以下方法: 这个带注释的方法将允许

  • 问题内容: 我正在重写使用内部框架编写的旧REST服务,以使用Spring。我有一个带有POST方法的Controller,该方法采用一个参数作为POST或正文。按照多个StackOverflow答案,我使用了@ModelAttribute批注并创建了一个模型。 我的问题是,旧的REST API在蛇形情况下使用属性名称-say 。我希望我的Java代码遵循Java命名约定,因此在我的模型中该字段称

  • 我有一个控制器,它的GET方法是这样写的: bean是正确的(getter和setter),服务调用返回带有thingId的正确ThingBean,并且显示了我在edit.jsp的JSP页面。 JSP是: 但是,JSP 显示主题和消息的空白值。是的,这些属性上有吸气剂/二传手。 我有一个非常相似的控制器,工作得很好,除了GET - mapped方法的签名中没有@RequestParam。 我在Sp