Thymeleaf select和CriteriaBuilder

时间:2016-01-09 20:15:14

标签: select thymeleaf criteria-api

我想做的一件简单的事情就是以某种方式提出了一个复杂的问题......我对此感到疯狂......

我想使用criteriabuilder比较我的Pages字段;得到所有小于,所以使用'le'代表数字('lessThanOrEqualTo'在这里不起作用)。

如何从Thymeleaf select中发送Integer,这样如果没有选择它,它将不会被添加到您的搜索criteriaBuilder中?

在选择中,你被百万富翁强迫将“未定义”字符串作为第一选项。如果我使用Integer作为字段类型,它将不会将此“未定义”选项绑定到已发布的模型,我将在以后将其从criteriabuilder中过滤掉。这里的数字还可以。如果没有选择或未定义,我需要它才能工作。

如果我走另一条路并为Pages选择一个字符串字段,那么它将不会被解析...       le(表达式x,表达式y)

CriteriaBuilder中的

。我无法转身

 b.get("pages") 

进入

Expression<? extends Number> myInteger

我已经尝试了....

                        <select th:field="*{pages}"  ng-model="bookData.pages">
                        <option selected="selected" value="">  select an option  </option>
                        <option th:each="selectItem: ${refData.pages}"

                              th:value="${selectItem.value}" 
                              th:text="${selectItem.label}">Pages</option>
                        </select>


    List<Predicate> predList = new LinkedList<Predicate>();

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Book> c =cb.createQuery(Book.class);
    Root<Book> b = c.from(Book.class);



    if( (!pages.equals("")) && (!pages.equals("undefined")) ){
      predList.add(cb.lessThanOrEqualTo(b.get("pages"), pages));

    }

如何从Thymeleaf中选择要在查询中进行比较的整数,以便如果未选择则不会添加到查询中?

Ahhhhhhh!

1 个答案:

答案 0 :(得分:0)

我通过从表格中检查我的Angularjs找到了解决方案

   $scope.processSearchForm = function() {

    var aData = $scope.bookData.author;
    var gData = $scope.bookData.genre;
    var pData = $scope.bookData.pages;

    if(typeof pData === 'undefined'){
        pData='0';
    }

如果它不存在则设置为'0',因此未定义/未选中。

然后我和Integer一起去了这个领域,显然是正确的方法。 它绑定到模型,并使用CriteriaBuilder从Query中过滤掉。

Johnny O。