Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 控制器的Springboot复选框值_Java_Spring Boot_Thymeleaf - Fatal编程技术网

Java 控制器的Springboot复选框值

Java 控制器的Springboot复选框值,java,spring-boot,thymeleaf,Java,Spring Boot,Thymeleaf,作为一个springboot thymeleaf新手,我已经阅读了很多关于这个主题的类似问题,但是我仍然缺少一些语法和springboot thymeleaf范例 web应用程序从后端数据库提取项目数据,后端数据库由Thymeleaf模板呈现。用户还可以生成数据的pdf报告,该报告也会在浏览器中呈现 实体: @Entity @Table(name = "REPORT_CS") public class ReportItemCs { public ReportItemCs () {}

作为一个springboot thymeleaf新手,我已经阅读了很多关于这个主题的类似问题,但是我仍然缺少一些语法和springboot thymeleaf范例

web应用程序从后端数据库提取项目数据,后端数据库由Thymeleaf模板呈现。用户还可以生成数据的pdf报告,该报告也会在浏览器中呈现

实体:

@Entity
@Table(name = "REPORT_CS")
public class ReportItemCs {

    public ReportItemCs () {}

    @Id
    @Column(name = "ITEM_ID")
    private Long itemId;

    @Column(name = "PROJ_NUM")
    private String projectNumber;

    @Column(name = "REGION")
    private String region;

//  additional fields, getters, setters
首先,一些有用的东西:

ThymileAF中的一个简单文本字段用于在post请求中传递字符串。控制器在将其作为projectNumber上的查询参数传递给回购协议的位置拾取它。查询返回thymeleaf在表中呈现的对象列表。注意,没有绑定到任何对象-它只是从UI发布字符串,然后将其作为查询参数传递

Html:

//无需绑定到后端即可工作
快速项目搜索:


控制器:

@RequestMapping(value = "/", method = RequestMethod.POST)
    public String showProject(String keyword, ModelMap model) {



        List<ProjectView> p = repository.findByProjectsContaining(keyword);
            if (p.size() == 0) {

                model.put("noProjectsMessage",
                String.format("Project with id containing \"%s\" not found...", keyword));
                return "home";
            } else {

                model.put("projectViews", p);
            }
        return "show-projects";
    }
@RequestMapping(value=“/”,method=RequestMethod.POST)
公共字符串showProject(字符串关键字,ModelMap模型){
List p=repository.findByProjectsContaining(关键字);
如果(p.size()==0){
model.put(“noProjectsMessage”,
格式(“未找到id包含\%s\”的项目…”,关键字);
返回“家”;
}否则{
模型放置(“项目视图”,p);
}
返回“展示项目”;
}
存储库:

    @Query("SELECT p FROM ProjectView p WHERE p.projectNumber like %?1%")
    List<ProjectView> findByProjectsContaining(@Param("keyword") String keyword);
@Query(“从ProjectView p中选择p,其中p.projectNumber像%?1%”)
列出findByProjectsContaining(@Param(“关键字”)字符串关键字);
因此,现在,我需要添加一些复选框,以提供按区域、项目类别等进行的额外筛选。我计划以两种方式使用复选框:1)使用jQuery动态筛选UI中的项目列表,以及将复选框值传递回控制器,以便使用它们填充pdf模板标题。然后,我要么执行另一个数据库查询,要么使用Stream()过滤原始查询生成的列表,并将过滤后的列表发送到pdf服务。当用户单击“PDF”按钮时,复选框值将转发到PDF服务,在该服务中生成报告标题和报告,并在单独的选项卡中作为字节流返回

Html


区域
全选
区域1
区域2
区域3
测试复选框
控制器

//Test the post method

@RequestMapping(value = "/cs-report", method = RequestMethod.POST)

public void printCheckboxValues(List<String> regions)

{

regions.foreach(s -> System.out.println(s));


}
    @PostMapping(value = "/cs-report")
    public String testCheckboxes(@ModelAttribute QueryDto queryDto) throws IOException {

List<ReportDto> dtos = repository.findByRegion(queryDto.getRegions());

dtos.foreach(s -> System.out.println(s.getProjectRegion()));
}

//测试post方法
@RequestMapping(value=“/cs report”,method=RequestMethod.POST)
public void printCheckboxValues(列出区域)
{
regions.foreach->System.out.println;
}
如果这种方法奏效,回购协议将类似于:

    @Query("SELECT p FROM ProjectView p WHERE p.region IN 1")
    List<ProjectView> findByRegion(@Param("regions") List<String> regions);
@Query(“从ProjectView p中选择p,其中p.region位于1”)
List findByRegion(@Param(“regions”)列表区域);
我认为控制器使用name属性来引用复选框值列表,但我不清楚如何设置控制器来实现这一点。我看到的大多数示例都将复选框绑定到其父对象,也许这就是需要做的。我有硬编码的复选框,因为没有那么多,我不希望数据库中的值发生变化。但是,如果我确实需要将复选框“region”值绑定到reportCs实体,请举一个语法示例


我们非常感谢您对该方法的任何其他建议,如果代码可以通用化以从多个复选框组中获取多个参数,这将是一个巨大的好处。谢谢。

好的,复选框需要绑定到表单支持bean。对Thymeleaf语法进行了一些修改,但这样做实际上对于将多个复选框组绑定到多个查询参数非常方便。另外,我已经意识到在模板中硬编码复选框值是一个坏主意(不是松散耦合的代码,并且会产生问题),因此我的下一步是从数据库中动态获取复选框值。谢谢你的阅读

html:


得到报告
全选
label class=“表格检查标签”for=“region1”>区域1
label class=“表格检查标签”for=“区域2”>区域2
label class=“表格检查标签”for=“区域3”>区域3
DTO对象:

// Form-backing bean to hold checkbox values on post submission
public class QueryDto {


    private List<String> regions;
    // Getter, setters

//表单支持bean在提交后保存复选框值
公共类查询器{
私人名单区域;
//盖特,塞特
控制器

//Test the post method

@RequestMapping(value = "/cs-report", method = RequestMethod.POST)

public void printCheckboxValues(List<String> regions)

{

regions.foreach(s -> System.out.println(s));


}
    @PostMapping(value = "/cs-report")
    public String testCheckboxes(@ModelAttribute QueryDto queryDto) throws IOException {

List<ReportDto> dtos = repository.findByRegion(queryDto.getRegions());

dtos.foreach(s -> System.out.println(s.getProjectRegion()));
}

@PostMapping(value=“/cs-report”)
公共字符串测试复选框(@modeldattribute QueryDto QueryDto)引发IOException{
List dtos=repository.findByRegion(queryDto.getRegions());
dtos.foreach(s->System.out.println(s.getProjectRegion());
}
存储库

@Query("SELECT p FROM ProjectView p WHERE p.region IN :regions")
    List<ProjectView> findByRegion(@Param("regions") List<String> regions);

@Query(“从ProjectView p中选择p,其中p.region位于:regions”)
List findByRegion(@Param(“regions”)列表区域);
@Query("SELECT p FROM ProjectView p WHERE p.region IN :regions")
    List<ProjectView> findByRegion(@Param("regions") List<String> regions);