📜  fil 文本与 select html textarea - Html (1)

📅  最后修改于: 2023-12-03 15:00:45.053000             🧑  作者: Mango

Fil 文本与 Select HTML Textarea

概述

在 Web 开发中,我们常常需要处理表单数据。其中,文本框(Textarea)是常用的表单元素之一,它允许用户输入多行文本。而 Fil 是一个基于 Java 的 Web 框架,提供了方便的表单数据绑定功能。本文将介绍如何使用 Fil 处理文本框数据,并结合 Select HTML 元素实现更加复杂的表单功能。

步骤
1. 添加依赖

首先,我们需要添加 Fil 的依赖。可以在 Maven 的 pom.xml 文件中加入以下代码:

<dependency>
  <groupId>io.github.biezhi</groupId>
  <artifactId>fil</artifactId>
  <version>1.3.0</version>
</dependency>
2. 创建 HTML 页面

接下来,我们需要创建一个 HTML 页面。在页面中添加一个文本框和一个下拉列表,如下所示:

<form action="/submit" method="post">
  <textarea name="message"></textarea>
  <select name="category">
    <option value="1">Category 1</option>
    <option value="2">Category 2</option>
    <option value="3">Category 3</option>
  </select>
  <input type="submit" value="Submit">
</form>

这里,<textarea> 元素的 name 属性设为 message,表示提交的数据将以 message 作为键,在后台处理时使用。而 <select> 元素的 name 属性设为 category,其选项(<option>)的 value 属性分别为 1、2、3,表示选项值。

3. 处理表单数据

在后台处理表单数据时,我们可以使用 Fil 框架提供的 Binding 类。在下面的例子中,假设我们的后台代码使用了 Spark 框架。代码如下:

import io.github.biezhi.anima.Anima;
import io.github.biezhi.anima.core.AnimaQuery;
import java.util.List;
import java.util.Map;
import spark.ModelAndView;
import spark.template.thymeleaf.ThymeleafTemplateEngine;

import static io.github.biezhi.anima.Anima.select;

public class Main {

  public static void main(String[] args) {
    // 添加路由
    get("/", (req, res) -> {
      Map<String, Object> model = new HashMap<>();
      return new ModelAndView(model, "index.html");
    }, new ThymeleafTemplateEngine());

    post("/submit", (req, res) -> {
      // 使用 Binding 处理表单数据
      Binding binding = Binding.create(req);
      String message = binding.getStr("message");
      int category = binding.getInt("category");

      // 写入数据库
      Message msg = new Message();
      msg.setMessage(message);
      msg.setCategory(category);
      msg.save();

      // 查询数据库
      List<Message> messages = select().from(Message.class).all();

      // 渲染模板
      Map<String, Object> model = new HashMap<>();
      model.put("messages", messages);
      return new ModelAndView(model, "result.html");
    }, new ThymeleafTemplateEngine());
  }
}

在代码中,我们首先在主类中定义了一个路由方法。其中,"/" 路径返回首页,"/submit" 接收 POST 请求,处理提交的表单数据。

我们使用 Binding.create(req) 方法创建一个新的 Binding 实例,然后调用其 getStr("message") 方法获取文本框输入的数据。同样地,使用 getInt("category") 方法获取下拉列表的数据。

接下来,我们将获取到的数据写入数据库,并查询出所有 Message 记录。最后,将查询到的数据渲染到 result.html 模板中。

4. 渲染模板

模板文件 result.html 可以使用 Thymeleaf 模板引擎来生成 HTML 代码。代码如下:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>Result</title>
</head>
<body>
  <h1>Result</h1>
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Message</th>
        <th>Category</th>
      </tr>
    </thead>
    <tbody>
      <tr th:each="msg : ${messages}">
        <td th:text="${msg.id}"></td>
        <td th:text="${msg.message}"></td>
        <td th:text="${msg.category}"></td>
      </tr>
    </tbody>
  </table>
</body>
</html>

这里使用 Thymeleaf 模板引擎,定义了一张表格来展示查询到的 Message 记录。模板文件中的 ${messages} 是一个 Thymeleaf 表达式,表示从后台传来的数据模型中获取名为 messages 的值。

在表格中使用了 th:each 属性来迭代数据集合,然后通过 th:text 将数据渲染到相应的表格单元中。

总结

通过本文的介绍,我们可以了解到如何使用 Fil 框架来处理表单数据,并结合 Select 元素实现更加复杂的表单功能。在示例代码中,我们使用了 Thymeleaf 模板引擎来渲染 HTML 页面。这些技术都是 Web 开发中不可或缺的一部分。如果您对此感兴趣,可以继续深入学习。