Java spring MVC使用html选项筛选结果
想象一个显示学生列表的简单应用程序 我想弄清楚这个概念。我的示例中的代码有望解释这一点 您有一个控制器Java spring MVC使用html选项筛选结果,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,想象一个显示学生列表的简单应用程序 我想弄清楚这个概念。我的示例中的代码有望解释这一点 您有一个控制器findStudents() 您有一个显示学生列表的网页。网页顶部是筛选选项列表。考虑一个带有选择选项的表单,例如国家、注册日期、状态、课程等,以及一个提交按钮。该网页向控制器发送http ajax请求,并将filterOptions参数作为数组传入。然后,控制器应返回一个json数组形式的筛选学生列表 这是我到目前为止的想法。在本例中,我希望在注册日期进行筛选(可能还有其他日期,但为了简单起见
findStudents()
您有一个显示学生列表的网页。网页顶部是筛选选项列表。考虑一个带有选择选项的表单,例如国家、注册日期、状态、课程等,以及一个提交按钮。该网页向控制器发送http ajax请求,并将filterOptions参数作为数组传入。然后,控制器应返回一个json数组形式的筛选学生列表
这是我到目前为止的想法。在本例中,我希望在注册日期进行筛选(可能还有其他日期,但为了简单起见,我选择了一个-并非所有筛选选项都可以同时选择)
下面的代码示例是否正确?我感觉到一股代码的味道
有些事情我不确定
- 过滤器选项是否存储为一个实体?e、 g.ArrayList of 筛选结果的国家/地区。。e、 g.让我看看英国的学生, 爱尔兰、法国等李>
- 我需要使用服务吗李>
- 学生应该如何看待
@RequestMapping(value = "/find-students", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> PostFormDataByMap(@RequestBody Map<String, Object> filterOptions) {
List<BeatRate> students = studentsJpaRepository.findAllWithFilters(filterOptions);
return obj;
}
@RequestMapping(value=“/find students”,method=RequestMethod.POST)
public@ResponseBody映射PostFormDataByMap(@RequestBody映射过滤器选项){
List students=StudentsParepository.findAllWithFilters(filterOptions);
返回obj;
}
接口
@Repository
public interface StudentsJpaRepository {
public List<Student> findAll();
public List<Student> findAllWithFilters();
}
@存储库
公共界面学生Parepository{
公共列表findAll();
公共列表findAllWithFilters();
}
dao-StudentsParepositoryImpl
public List<Student> findWithFilter(HashMap filterOptions<String, String>) {
String sql =
"SELECT " +
"id",
"first-name, " +
"address, " +
"course," +
"age," +
"date_enroled"
"FROM " +
"BeatRate ";
if(filterOptions.get("date_enroled")){
sql = sql+" WHERE date_enroled = "+filterOptions.get("date_enroled");
}
Query query = entityManager.createNativeQuery(sql, Student.class).setMaxResults(10);
return query.getResultList();
}
公共列表findWithFilter(HashMap filterOptions){
字符串sql=
“选择”+
“身份证”,
“名字,”+
地址+
“当然”+
“年龄,”+
“登记日期”
“来自”+
“殴打”;
if(filterOptions.get(“date\u enroled”)){
sql=sql+“其中date_enroled=“+filterOptions.get”(“date_enroled”);
}
queryquery=entityManager.createNativeQuery(sql,Student.class).setMaxResults(10);
返回query.getResultList();
}
仅供参考,您的findWithFilter方法可能容易受到SQL注入的攻击,如果您不修复它,可能会对应用程序造成严重的安全问题。不应使用字符串加法连接用户控制下的参数(日期)。您应该使用参数化查询(例如+“WHERE date\u enroled=?”
,然后使用query.setParameter(…)应用变量参数
@Service接口及其实现是您应该调用存储库的地方。这是Spring应用程序的正确设计。关于存储库,存储库接口应该从JPARepository扩展,如果您想要自定义功能,则应覆盖这些方法。