java - 如何从 spring boot thymeleaf 获取输入值到java类?

标签 java spring spring-boot thymeleaf

我正在尝试从 thymeleaf input 获取一个值到我的 java 类中。

来自 thymeleaf 的简单脚本:

<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 创建的。我究竟做错了什么?我对其他选择持开放态度,我正在尝试理解并学习如何解决这个问题。

最佳答案

直接使用 servlet 本身并没有什么问题,但是 Spring MVC 和 Boot 都提供了许多工具来让您的生活更轻松,让您的代码更简洁。我将为您提供一些需要深入研究的领域,但请查看 GitHub 上的更多示例以供进一步阅读。当您查看文档时,请仔细查看 @ModelAttribute, th: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 可以:

@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";
    }    
}

请注意,在上面的 Controller 中,我们不需要扩展任何其他类。只需添加注释即可。

如果您希望在 Java 代码中打印名为 myParam 的 URL 参数的值,Spring 可以让您在 Controller 中使用 @RequestParam 轻松完成此操作。它甚至可以将其转换为 Integer 类型,而无需您进行任何额外的工作:

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

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

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

@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

}

关于java - 如何从 spring boot thymeleaf 获取输入值到java类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899494/

相关文章:

java - 在 Singleton 类中 Autowiring Spring bean

spring-boot - Java Spring maxFileSize 和 maxRequestSize 没有得到尊重?

java - Elasticsearch java 客户端初始化失败

java - java的String.format()中数字的可配置意义?

java - Cookie http 仅适用于 spring security 和 servlet 2.5?

java - 启动服务器时 Tomcat 7 错误

java - SpringBoot命令行运行器

java - android中如何读取临时数据

java - 根据每个字符的出现次数有效地对字符串进行排序

java - 如何计算 "Java Project"中的行数