Я использую Spring 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"}]}
Если вы посмотрите на «оп» собственности внутри правил массива , вы увидите операцию, которая должна быть выполнена. Jq-сетка имеет следующие операции:
['eq', 'ne', 'lt', 'le', 'gt', 'ge', 'bw', 'bn', 'in', ' п», 'EW', 'ан', 'сп', 'пс']
что соответствует
[ 'равно', 'не равно', 'меньше', 'меньше или равно', 'больше', 'больше или равно', 'начинается с', 'не начинается с', 'находится в', 'не находится в', 'заканчивается на', 'не заканчивается на', 'содержит', ' не содержит ']
Я планирую использовать критерии поиска в спящем режиме, чтобы включить функцию поиска. Для этого я использую Jackson's 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 зимует команду? Например «сп» должны соответствовать
criteria.add(Restrictions.like("firstName", myJsonJqgridSearchModel.data));
Я сделал некоторые изменения, и приведенное выше отражает мой текущий код, есть ли лучший способ сделать это? – Binaryrespawn