2010-06-23 91 views
3

我有一個表,有一系列事件, 我的類的名字是Entry。Grails:動態地過濾Grails表中的數據

這裏是我的表的圖片

是西班牙語,但基本是相同的,所以它不應該是一個問題。 (過濾器HTML代碼還沒有如此混亂,但它的工作原理)

這裏是我在查找條目時得到的結果。

http://i45.tinypic.com/r1iexv.jpg

現在我的問題是,我需要顯示的結果/過濾成從PIC1同桌,所以這將是基本上像應用濾波器表更新。

如果你需要更多的信息,這裏是我的老問題的鏈接。感謝proflux!

I have a bunch of data and I need a data filter using Grails

大多數的搜索代碼是存在的,

任何幫助將不勝感激!

UPDATE:

我有過濾日期的問題,但...我有兩個日期... 一個是事件將要發生的日期,另一種是LASTUPDATED這我認爲這是上次修改Event時Grails的關鍵字。任何有關過濾日期的幫助將不勝感激。

我需要從今天的日期開始顯示第一張桌子上的所有內容。如果我想從過去找到某些東西,我應該可以使用過濾器來找到它。

有關如何做到這一點的任何想法?

UPDATE:

因此,這裏是我的list.gsp

http://i49.tinypic.com/291ksy1.png

,這裏是我的searchResults.gsp施加單詞 「魯塔」

所以過濾器基本上一切看起來不錯,但日期過濾器不起作用。

這裏是在控制器未過濾的日期

def searchResults = { 
    def entryCriteria = Entry.createCriteria() 
    def results = entryCriteria.list { 
     if(params?.proyectoRuta) { 
      ilike("proyectoRuta","%${params.proyectoRuta}%") 
      } 

     } 
     if(params?.day) { 
      eq("fechaCambio", params.day) 
     } 
     render(view:'searchResults', model:['results':results]) 
} 

是過濾單詞而不是日期

proyectoRuta。將標題和fechaCambio將在示出的日期的代碼第一列。我還沒有試圖過濾lastUpdated日期。

UPDATE:

好了,所以這是我的控制器:由於是大量的代碼,我將只發布重要DEFS

def search = { 
    render(view:'search') 

} 

def searchResults = { 
    def entryCriteria = Entry.createCriteria() 
    def results = entryCriteria.list { 
     if(params?.fechaCambioD && params?.fechaCambioH) { 
      between("fechaCambio", params.fechaCambioD, params.fechaCambioH) 
      } 

     if(params?.lastUpdatedD && params?.lastUpdatedH) { 
      between("lastUpdated", params.lastUpdatedD, params.lastUpdatedH) 
      } 

     if(params?.proyectoRutaN) { 
      ilike("proyectoRuta","%${params.proyectoRutaN}%") 
      }    
     } 
     render(view:'searchResults', model:['results':results, 'proyectoRutaN':params?.proyectoRutaN, 'fechaCambioD':params?.fechaCambioD, 'fechaCambioH':params?.fechaCambioH, 'lastUpdatedD':params?.lastUpdatedD, 'lastUpdatedH':params?.lastUpdatedH]) 
} 
} 

這裏是searchResults.gsp

<tbody> 
       <g:each in="${results}"> 

         <td><g:formatDate format="dd-MMMM-yyyy" date="${it.fechaCambio}" /></td> 
         <td><b>${it.proyectoRuta}</b></td> 
         <td>${it.summary}</td> 
         <td><g:formatDate format="dd-MMM-yyyy HH:mm z" date="${it.lastUpdated}" /></td> 
         <td> 
         <g:form> 
          <g:hiddenField name="id" value="${it?.id}" /> 
          <span class="simple"><g:actionSubmit class="editar" action="edit" value="${message(code: 'default.button.editar.label', default: '&nbsp;&nbsp;&nbsp;')}" /></span> 
          <span class="simple"><g:actionSubmit class="eliminar" action="delete" value="${message(code: 'default.button.eliminar.label', default: '&nbsp;&nbsp;&nbsp;')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Esta seguro que desea Eliminar?')}');" /></span> 
         </g:form> 
         </td> 
        </tr> 
       </g:each> 
      </tbody> 

回答

1

試試這個使用相同的GSP的結果和搜索條件都...

<html> 
<body> 
    <h1>Search Criteria</h1> 

    <g:form controller="entry" action="searchResults"> 
     Title: <g:textField name="title" value="${title}" /> 
     Date: <g:datePicker name="startTime" value="${startTime}" precision="day" /> 
     <g:submitButton name="submit" value="Search" /> 
    </g:form> 
    <g:if test="${results}"> 
     <h1>Search Results</h1> 
     <table> 
      <tr> 
       <th>Title</th> 
       <th>Start Date</th> 
      </tr> 
      <g:each in="${results}"> 
       <tr> 
        <td>${it.title}</td> 
        <td>${it.startTime}</td> 
       </tr> 
      </g:each> 
     </table> 
    </g:if> 
</body> 
</html> 

然後爲控制器關閉:

def search = { 
     render(view:'search') 
    } 

    def searchResults = { 
     def entryCriteria = Entry.createCriteria() 
     def results = entryCriteria.list { 
      if(params?.title) { 
       ilike("title", "%${params.title}%") 
      } 
     } 
     render(view:'search', model:['results':results, 
            'title':params?.title, 
            'startTime':params?.startTime]) 
    } 

這是從快速演示我寫的真快,但是從信息,我給你的其他問題和Grails Reference Documentation使用標準闕你應該能夠弄明白。如果遇到任何問題,請告訴我。

更新:

嘗試這樣的事情你的標準間:

def entryCriteria = Entry.createCriteria() 
def results = entryCriteria.list { 
    if(params?.title) { 
     ilike("title", "%${params.title}%") 
    } 
    if(params?.day) { 
     between("day", params.day, params.day+1) 
    } 
} 
+0

我不知道這是一個很好的選擇...我給searchResults.gsp相同的HTML和CSS,我給list.gsp 。所以我想我需要在list.gsp上工作,以顯示從今天開始過濾日期的「結果」。這樣做有什麼意義嗎? – randomizertech 2010-06-24 13:57:39

+1

lastUpdated是Grails中的一個特殊變量,但它可能實際上只是你想要的;每次修改和保存對象時,它都會將該值更新爲當前時間。 – proflux 2010-06-24 14:28:44

+0

看起來您剛剛開始使用Grails,希望能提供幫助,但我不想爲您提供幫助,以至於您無法爲自己學習。考慮上面的屏幕截圖(是list.gsp?),並將其與我提供的gsp進行比較。兩者都有頂部的搜索表單和底部的結果。我可以告訴你,在來自另一個問題的信息之間,你在這裏發佈的內容以及我在這裏發佈的信息,都可以讓你的應用完成你想要的任務。你只需要弄清楚如何把它放在一起,讓我知道如果你卡住了,我會盡力幫助你解決問題。 – proflux 2010-06-24 14:38:08

1

聽起來就像你想在'列表'視圖中顯示搜索結果,所以它們顯示在表中就像未過濾。您可以重新使用該視圖並將過濾的結果作爲實例列表傳入。

您是否對您的Entry域對象有意見?如果不是,請用grails generate-view Entry生成一些腳手架視圖。然後在你的控制器,讓你的SearchResult所方法是這個樣子:

def searchResults = { 
    def entryInstanceList = Entry.list() // replace with actual filtering logic 
    render(view:'list', model: [entryInstanceList: entryInstanceList]) 
} 
+0

是的,我得到的一切,謝謝你。 我有一個問題,但我會更新的問題,讓大家看到... – randomizertech 2010-06-23 21:30:33