【问题标题】:How to create a filter based on what I selected in multiple drop-down lists?如何根据我在多个下拉列表中选择的内容创建过滤器?
【发布时间】:2019-03-31 03:54:39
【问题描述】:

我有大约 15 个下拉列表,我想返回数据库中与下拉列表中选择的对象相同的对象。我设法使用 Thymeleaf 和 Spring 在下拉列表中显示数据,然后我发出了一个 POST 请求,我收到了我选择的内容。我不知道如何使用 jpa 来处理仓库中的方法,这些方法为我提供数据库中的对象。

控制器

@GetMapping("/filter/functionality/misramessages")
    public String filterFunctionality(Model model) {

        model.addAttribute("misraMessages", misraMessagesService.findAllMisraMessagesFromDb());
        model.addAttribute("mistraObjectSelected", new MisraMessages());

        return "functionality";
    }

    @PostMapping("/filter/functionality/misramessages")
    public String getFilterFunctionalityResult(@PathVariable(name = "buidId", required=false) Build buildId,
                                               @RequestParam(name = "fileName", required=false) String fileName,
                                               @RequestParam(name = "filePath", required=false) String filePath,
                                               @RequestParam(name = "messageNumber", required=false) String messageNumber,
                                               @RequestParam(name = "messageSeverity", required=false) String messageSeverity,
                                               @RequestParam(name = "guidelineNumber", required=false) String guidelineNumber,
                                               @RequestParam(name = "guidelineName", required=false) String guidelineName,
                                               @RequestParam(name = "guidelineType", required=false) String guidelineType,
                                               @RequestParam(name = "guidelineSeverity", required=false) String guidelineSeverity,
                                               @RequestParam(name = "requirement", required=false) String requirement,
                                               @RequestParam(name = "sourceCodeCategory", required=false) String sourceCodeCategory,
                                               @RequestParam(name = "safety", required=false) String safety,
                                               @RequestParam(name = "functionality", required=false) String functionality,
                                               @RequestParam(name = "subFunctionality", required=false) String subFunctionality,
                                               @RequestParam(name = "applicationType", required=false) String applicationType,
                                               @RequestParam(name = "supplier", required=false) String supplier,
                                               @RequestParam(name = "cmVersion", required=false) String cmVersion,
                                               @RequestParam(name = "asilLevel", required=false) String asilLevel) {


 }

下拉菜单

 <form action="#" th:action="@{/filter/result}" method="post">

        <!-- Filter Build-->
        <div class="form-group row">
            <label for="build" class="col-sm-2 col-form-label">Build</label>
            <div class="col-sm-10">
                <select class="form-control"  name="buildId" id="build">
                    <option th:value="0" text="Please Select"></option>
                    <option  th:each = "misra : ${misraMessages}"
                             th:value="${misra.buildId.buildId}"
                             th:text="${misra.buildId.buildId}">
                    </option>
                </select>
            </div>
        </div>

        <!-- Filter File Name-->
        <div class="form-group row">
            <label for="fileName" class="col-sm-2 col-form-label">File Name</label>
            <div class="col-sm-10">
                <select class="form-control"  name="fileName" id="fileName">
                    <option th:value="0" text="Please Select"></option>
                    <option  th:each = "misra : ${misraMessages}"
                             th:value="${misra.fileName}"
                             th:text="${misra.fileName}">
                    </option>
                </select>
            </div>
        </div>
           ..........
           ..........
           ..........
</form>

【问题讨论】:

  • 嗨亚历山德拉!那么您需要知道的是,如何使用相应的过滤器对您的数据库进行查询?如果是这样,您是否使用任何 ORM(对象关系映射)工具,例如 Hibernate?
  • 您好!我正在使用 JPA,我的问题是如何生成查询,因为我有 17 个字段,并且可以有多种组合,例如:findByFileName()、fileByFileNameAndFilePath()、findByFileNameAndBuildId()...等。跨度>

标签: spring spring-mvc spring-boot thymeleaf


【解决方案1】:

由于您的问题太笼统,我无法为您提供具体答案,但我会尽力为您提供大致的想法。

首先您需要了解JPA 的工作原理。决定你想用什么,例如。 hibernate、spring data、jdbc、mybatis 等等……你可以在网上找到很多关于如何使用JPA 的教程。

首先您需要创建一个包含所有属性的POJO 类。这个POJO 类是这样的

public class MyClass{

private String filename;
private String filePath;
...
//getters setters
}

我会将所有RequestParam 合并为map。这不是必需的,但可以使您的代码干净,因为您有很多 RequestParam

 @PostMapping("/filter/functionality/misramessages")
        public String getFilterFunctionalityResult(@PathVariable(name = "buidId", required=false) Build buildId,@RequestParam Map<String,String> requestParams){
// your code here
}

现在您可以将所有RequestParam 值设置为POJO

Myclass myClass = new Myclass();
myclass.setFileName(requestParams.get("fileName"));
...

您必须创建@Service@Repository 类来处理所有服务层逻辑和与数据库交互的逻辑。 spring.io 上有完美的例子。尝试在那里度过一段时间。

希望这会有所帮助。

【讨论】:

  • 嗨,我按照你写的方法做了,但我的问题是如何创建查询,因为我有 17 个字段,并且可以有多个组合,例如:findByFileName()、fileByFileNameAndFilePath()、 findByFileNameAndBuildId()...等
  • 你可以有多个查询。这完全没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多