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