java - 过滤crud list问题玩!框架

标签 java web-applications model playframework crud

这是我在这里的第一篇文章 :) 我对 CRUD 模块有疑问。我想在列表中添加更多过滤器,但我没有成功理解工厂模型。我有这段代码:

@With(Secure.class)
public class Contacts extends CRUD {


public static void list(int page,String search,int origine,String searchFields, String orderBy, String order) {
    ObjectType type = ObjectType.get(getControllerClass());
    notFoundIfNull(type);
    if (page < 1) {
        page = 1;
    }

    //System.out.println(type);

    List<Model> contacts = Model.Manager.factoryFor(Contact.class).fetch((page - 1) * getPageSize(), getPageSize(), orderBy, order, searchFields == null ? new ArrayList<String>() : Arrays.asList(searchFields.split("[ ]")), search, (String) request.args.get("where"));
    System.out.println(contacts);

    List<Model> objects = type.findPage(page, search, searchFields, orderBy, order, (String) request.args.get("where"));
    Long count = type.count(search, searchFields, (String) request.args.get("where"));
    Long totalCount = type.count(null, null, (String) request.args.get("where"));


     // Liste des origines
    List<Origine> origines = Origine.find("order by nom asc").fetch();
    List<Employe> employes = Employe.find("order by nom asc").fetch();

    try {
        render(type, objects, count, totalCount, page, orderBy, order, origines,employes);
    } catch (TemplateNotFoundException e) {
        render("CRUD/list.html", type, objects, count, totalCount, page, orderBy, order, origines, employes);
    }
}

我想搜索提交的“来源”和“员工”,我该怎么做?感谢您的帮助。 :)

最佳答案

我的代码进步了!!!你的建议很有帮助!现在我创建了一个扩展 CRUD 的新类 Recherche。我想用动态字段更改字段“Contact”,因为我想扩展 Recherche for Contact 和 Compte 以及其他类!我已经测试了 ObjectType 宽度没有成功...

public class Recherche extends CRUD {


public static List findPage(int page, String search, String searchFields, String orderBy, String order, String where) throws ClassNotFoundException{

    int pageLength = getPageSize();
    String q = "from Contact where 1=1 ";
    if (search != null && !search.equals("")) {
        String searchQuery = getSearchQuery();
        if (!searchQuery.equals("")) {
            q += " and (" + searchQuery + ")";
        }
        q += (where != null ? " and " + where : "");
    } else {
        q += (where != null ? " and " + where : "");
    }

    /**
     * Ajout des champs auxiliaires
     */
    List<Property> fields = Contact.Manager.factoryFor(Contact.class).listProperties();

    String qaux = "";
    List<Integer> relationArray = new ArrayList<Integer>();

    for (Property field : fields) {
        if(field.isRelation){

            if(request.params.get(field.name) != null){
                int requestArg = Integer.parseInt(request.params.get(field.name));

                if(requestArg != 0){
                    if (!qaux.equals("")) {
                        qaux += " and ";
                    }
                    relationArray.add(requestArg);
                    qaux += " "+field.name+"_id = ?"+(relationArray.size()+1)+" ";
                }
            }
        }
    }
    if(!qaux.equals("")){
        q+= " and ( "+qaux+" ) ";
    }
    /**
     * Fin ajout champs auxiliaires
     */


    if (orderBy == null && order == null) {
            orderBy = "nom";
            order = "ASC";
    }
    if (orderBy == null && order != null) {
            orderBy = "nom";
    }
    if (order == null || (!order.equals("ASC") && !order.equals("DESC"))) {
            order = "ASC";
    }
    q += " order by " + orderBy + " " + order;
    Query query = Contact.em().createQuery(q);
    if (search != null && !search.equals("") && q.indexOf("?1") != -1) {
        query.setParameter(1, "%" + search.toLowerCase() + "%");
    }

    // Champs auxiliaires
    for (int i = 0; i < relationArray.size(); i++) {
        query.setParameter((i+2), relationArray.get(i));
    }


    query.setFirstResult((page - 1) * pageLength);
    query.setMaxResults(pageLength);

    return query.getResultList();
}


public static Long count(String search, String searchFields, String where) {
    String q = "select count(c.id) from Contact c where 1=1 ";

    if (search != null && !search.equals("")) {
        String searchQuery = getSearchQuery();
         if (!searchQuery.equals("")) {
             q += " and (" + searchQuery + ")";
         }
         q += (where != null ? " and " + where : "");
     } else {
         q += (where != null ? " and " + where : "");
     }
     /**
     * Ajout des champs auxiliaires
     */
    List<Property> fields = Contact.Manager.factoryFor(Contact.class).listProperties();

    String qaux = "";
    List<Integer> relationArray = new ArrayList<Integer>();

    for (Property field : fields) {
        if(field.isRelation){

            if(request.params.get(field.name) != null){
                int requestArg = Integer.parseInt(request.params.get(field.name));

                if(requestArg != 0){
                    if (!qaux.equals("")) {
                        qaux += " and ";
                    }
                    relationArray.add(requestArg);
                    qaux += " "+field.name+"_id = ?"+(relationArray.size()+1)+" ";
                }
            }
        }
    }
    if(!qaux.equals("")){
        q+= " and ( "+qaux+" ) ";
    }

    /**
     * Fin ajout champs auxiliaires
     */


     Query query = Contact.em().createQuery(q);
     if (search != null && !search.equals("") && q.indexOf("?1") != -1) {
         query.setParameter(1, "%" + search.toLowerCase() + "%");
     }
     // Champs auxiliaires
    for (int i = 0; i < relationArray.size(); i++) {
        query.setParameter((i+2), relationArray.get(i));
    }

     return Long.decode(query.getSingleResult().toString());
 }


public static void list(int page,String search,int origine,String searchFields, String orderBy, String order) throws ClassNotFoundException {
    ObjectType type = ObjectType.get(getControllerClass());
    notFoundIfNull(type);

    if (page < 1) {
        page = 1;
    }

    List<Contact> objects = Contacts.findPage(page, search, searchFields, orderBy, order, (String) request.args.get("where"));
    Long count = Contacts.count(search, searchFields, (String) request.args.get("where"));
    Long totalCount = Contacts.count(null, null, (String) request.args.get("where"));


     // Liste des origines
    List<Origine> origines = Origine.find("order by nom asc").fetch();
    // Liste des employes
    List<Employe> employes = Employe.find("order by nom asc").fetch();
    // Liste des villes
    List<Ville> villes = Ville.find("order by nom asc").fetch();

    try {
        render(type, objects, count, totalCount, page, orderBy, order, origines,employes,villes);
    } catch (TemplateNotFoundException e) {
        render("CRUD/list.html", type, objects, count, totalCount, page, orderBy, order, origines, employes,villes);
    }
}


private static String getSearchQuery() {
    List<Property> fields = Contact.Manager.factoryFor(Contact.class).listProperties();

    ObjectType type = ObjectType.get(getControllerClass());
    notFoundIfNull(type);



    String q = "";
    for (Property field : fields) {
        if(field.isSearchable){
            if (!q.equals("")) {
                q += " or ";
            }

            q += "lower(" + field.name + ") like ?1";
        }
    }
    return q;
}

关于java - 过滤crud list问题玩!框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6579514/

相关文章:

php - wasRecentlyCreated 和 wasChanged 不起作用

java - 使用比较器初始化 PriorityQueue

r - 'shiny' R包如何处理数据帧?

Java:从 Graphics 中获取图像并将其转换为临时 BufferedImage

java - 用于管理多个 Web 应用程序配置的工具

authentication - Sitecore 与 LDAP - 以编程方式进行身份验证

java - 将字符串数组添加到 JComboBox

java - 如何将这些类包装到AsyncClass中然后使用它们?

java - onPreExecute() 和 onPostExecute() 是在 UI 线程上执行还是在启动 AsyncTask 的线程上执行?

java - 为什么 java.util.Date 给我错误的时间?