我使用的弹簧3.0和我使用的jqGrid的插件。 我的工作搜索功能,它发送一个JSON字符串的所有搜索条件。 这里是字符串可以是什么样子。
{"groupOp":"AND","rules":[{"field":"firstName","op":"bw","data":"John"},{"field":"lastName","op":"cn","data":"Doe"},{"field":"gender","op":"eq","data":"Male"}]}
如果你看一下规则阵列里面的“OP”属性,你会看到它必须要执行的操作。 该JQ-网格具有以下操作
[ 'Q', 'I', 'L', '的', 'GT', 'G', '体重', 'BN', '在', 'I', 'W', 'EN',' CN '' N“]
这对应于
[“等于”,“不等于”,“少”,“小于或等于”,“更大”,“大于或等于”,“开头”,“不与开始”,“是”,'不是在,‘结尾’,‘不与’,‘包含结束’,‘不包含’]
我打算使用休眠条件进行搜索,使搜索功能。 对于这个我使用杰克逊的ObjectMapper对传入的JSON转换成Java。 这是一切都很好。 这里是我的代码转换的JSON。
public class JsonJqgridSearchModel {
public String groupOp;
public ArrayList<JqgridSearchCriteria> rules;
}
public class JqgridSearchCriteria {
public String field;
public String op;
public String data;
public SimpleExpression getRestriction(){
if(op.equals("cn")){
return Restrictions.like(field, data);
}else if(op.equals("eq")){
return Restrictions.eq(field, data);
}else if(op.equals("ne")){
return Restrictions.ne(field, data);
}else if(op.equals("lt")){
return Restrictions.lt(field, data);
}else if(op.equals("le")){
return Restrictions.le(field, data);
}else if(op.equals("gt")){
return Restrictions.gt(field, data);
}else if(op.equals("ge")){
return Restrictions.ge(field, data);
}else{
return null;
}
}
}
@RequestMapping(value = "studentjsondata", method = RequestMethod.GET)
public @ResponseBody String studentjsondata(@RequestParam("_search") Boolean search ,HttpServletRequest httpServletRequest) {
StringBuilder sb = new StringBuilder();
Format formatter = new SimpleDateFormat("MMMM dd, yyyy");
if(search){
ObjectMapper mapper = new ObjectMapper();
try {
JsonJqgridSearchModel searchModel= mapper.readValue(httpServletRequest.getParameter("filters"), JsonJqgridSearchModel.class);
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(Person.class);
Iterator<JqgridSearchCriteria> iterator = searchModel.rules.iterator();
while(iterator.hasNext()){
System.out.println("before");
criteria.add(iterator.next().getRestriction());
System.out.println("after");
}
} catch (JsonParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{//do other stuff here}
这就是问题的用武之地。我如何transalate的jqGrid的操作进入冬眠equivelent命令? 例如,“CN”应与对应
criteria.add(Restrictions.like("firstName", myJsonJqgridSearchModel.data));