如何从spring boot百里香叶到java类获取输入值?

时间:2016-11-30 22:33:51

标签: java spring spring-boot thymeleaf

我正试图从百万富翁input获取一个值到我的java类中。

来自百里香的简单脚本:

<input type="text" id="datePlanted" name="datePlanted" th:value="*{datePlanted}"/>

我如何能够将datPlanted检索到我的java类中?

尝试了以下servlet教程:

@WebServlet("/")
public class LoginServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
        // read form fields
        String username = request.getParameter("datePlanted");

        System.out.println("date: " + datePlanted);

        // do some processing here...
        // get response writer
        PrintWriter writer = response.getWriter();
        // return response
        writer.println(htmlRespone);
    }
}

我尝试按照教程,但我不确定我应该/不应该使用servlet。我的应用程序是使用Spring Boot,Java和Thymeleaf创建的。我究竟做错了什么?我对其他选项持开放态度,我正在努力理解并学习如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

直接使用servlet并没有什么本质上的错误,但Spring MVC和Boot都提供了许多工具来让您的生活更轻松,并使您的代码更简洁。我将为您提供一些需要深入研究的方面,但请查看GitHub上的更多示例以供进一步阅读。在查看文档时,请仔细查看@ModelAttributeth:object@RequestParam

让你有foo.html:

<form th:action="@{/foo}" th:object="${someBean}" method="post">
   <input type="text" id="datePlanted" name="datePlanted" />
   <button type="submit">Add</button>
</form>

该表单使用了Thymeleaf的th:object符号,我们可以使用Spring的ModelAttribute方法参数来引用它。

然后您的控制器可以:

@Controller
public class MyController {

    @GetMapping("/foo")
    public String showPage(Model model) {
        model.addAttribute("someBean", new SomeBean()); //assume SomeBean has a property called datePlanted
        return "foo";
    }

    @PostMapping("/foo")
    public String showPage(@ModelAttribute("someBean") SomeBean bean) {

        System.out.println("Date planted: " + bean.getDatePlanted()); //in reality, you'd use a logger instead :)
        return "redirect:someOtherPage";
    }    
}

请注意,在上面的控制器中,我们不需要扩展任何其他类。只是注释,你就可以了。

如果您希望在Java代码中打印名为myParam的URL参数的值,那么您可以使用@RequestParam轻松地在控制器中执行此操作。它甚至可以将其转换为Integer类型的内容,而无需您做任何额外的工作:

    @PostMapping("/foo")
    public String showPage(@ModelAttribute("someBean") SomeBean bean, @RequestParam("myParam") Integer myIntegerParam) {

        System.out.println("My param: " + myIntegerParam);
        return "redirect:someOtherPage";
    }    

我还没有包含适当处理日期的步骤,因为这超出了这个问题的范围,但如果您遇到问题,可以考虑向控制器添加类似的内容:

@InitBinder
public void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(
            dateFormat, true));
}

编辑:SomeBean是POJO:

public class SomeBean {

   private LocalDate datePlanted;

   //include getter and setter

}

答案 1 :(得分:0)