绑定请求映射以在html中提交输入按钮(Springboot)

时间:2017-02-07 15:39:25

标签: java html spring spring-boot

我的RequestController:

@Controller
@RequestMapping("/request")
public class RequestsController {

    private static final Logger log = LoggerFactory.getLogger(TmtApplication.class);

    @Autowired
    RequestRepository requestRepository;

    @Autowired
    UsersRepository usersRepository;

    @RequestMapping("/save")
    String saveRequest()
    {
        Request requestObj = new Request(usersRepository.findOne(1L), new Date());
        requestObj.setDescription("I got so bored");
        requestObj.setStatus(false);
        requestObj.setRequestDate(new Date());
        requestRepository.save(requestObj);
        return "index";
    }
}

我的按钮:

<input type="submit" value="Submit Request" style="display: block;">

我正试图让我的按钮触发此请求。我应该添加什么来启动对/ save的调用?

更新

形式:

<form action="/request/save" method="post" commandName="requestData">
    <input type="text" id="dateInput" value="" style="display: none;"/>
    <div style="width: 200px;"><input type="submit" value="Submit Request" style="display: block;">
    </div>
</form>

控制器:

@RequestMapping(value = "/save", method = RequestMethod.POST)
    String saveRequest(@ModelAttribute("requestData") Request requestData, Map<String, Object> map,
                       HttpServletRequest request)
    {
        Request requestObj = new Request(usersRepository.findOne(1L), new Date());
        requestObj.setDescription(requestData.getDescription());
        requestObj.setStatus(false);
        requestObj.setRequestDate(requestData.getRequestDate());
        requestRepository.save(requestObj);
        return "save";
    }

1 个答案:

答案 0 :(得分:1)

要使用弹簧代码实现此功能,您必须使用表单环绕标记。

<form action="save">
     <input type="submit" value="Submit Request" style="display: block;">
</form>

此外,您必须从正确的URL调用此方法才能使其正常工作。表单操作可以相对于您所在的页面,也可以相对于URL的根目录。

您可以通过两种方式点击RequestMapping,该选项可解析为:

/request/save

一个是使用相对行动。您必须在此网址上提供HTML:

    {server:port}/request

然后你的行动应该是:

    "save"

第二个选项是使用表单操作的绝对路径:

    "/request/save"

哪个适用于您在此服务器上提供HTML的位置。

摘要

您需要提交一些内容(表单),并告诉它在哪里提交(操作)。因此,您需要同步您的网址,表单和提交端点。

此外,最好在RequestMapping上指定请求方法,以便您可以单独处理POST / GET。根据{{​​3}},默认行为是映射所有HTTP方法:

  

以上示例未指定GET与PUT,POST等,   因为@RequestMapping默认映射所有HTTP方法。

为表单提交指定POST是个好主意。

    @RequestMapping(value = "/save", method = RequestMethod.POST)

这是你应该去的方向,因为表单提交应该是一个POST动作,以便表单的内容进入请求体,最终你会希望它从你的表单中获取POST的字段,并将它们映射到Controller类中的对象。

一些提示:

考虑使用像Thymeleaf这样的模板引擎(春天经常在他们的教程中使用)或JSP + taglib。 Thymeleaf的重量更轻一些,如果你使用它,你可以像Spring一样编写很多例子来做事。有关示例,请参阅本教程:

Spring Documentation

或者,如果某人只是尝试测试请求映射,或者您只是想验证您的MVC端点是否按照您的想法进行操作,那么使用Spring Boot: Handling Form Submission之类的工具会更简单(我非常推荐)提交您的请求。这将为您带来一些变量,因此您可以专注于您正在尝试开发的内容(REST API?),而不是测试设置。