2011-05-16 37 views
0

我有如下因素GSP頁面:Grails的搜索機制

<g:form controller="??" action="??"> 
    <h1>Search</h1> 
    <g:submitButton name="search" value="Search"/> 

    <div id="resultsHere"> 

    </div> 

    </g:form> 

我想要做的是,每次「搜索點擊」數據庫中搜索記錄,讓我們來想象即時尋找書名。所以每次我寫一個標題時,數據庫都會查找書籍並打印與書籍相關的每個數據。我該怎麼做=?

我的想法是有在div類似於此:

<ul> 
<g:each in="${bookList}"> 
    <li>Name: ${it.name}, Locale: ${it.isbn}</li> 
</g:each> 
</ul> 

所以問題是,當點擊搜索按鈕時,該處理的行動應的頁面重定向到同一頁面控制器,並通過已過濾的書籍列表,以便將其打印在<g:each in="${bookList}">標籤中。

我想在這種情況下,這是最好的解決方案的意見。我也可以直接在頁面中顯示結果,但我想爲外觀做一些CSS,所以我認爲這不會是使用渲染的好主意。任何幫助都是可以理解的,如果可能的話,可以使用代碼(特別是過濾部分)。

回答

0

我會在你的控制器中有一個動作,並將列表渲染出來。

即:爲僞代碼在你看來

<g:form controller="??" action="??"> 
    <h1>Search</h1> 
    <g:submitButton name="search" value="Search"/> 

</g:form> 
<g:each in="${books}"> 
    <li class="book">Name: ${it.name}, Locale: ${it.isbn}</li> 
</g:each> 

您現在可以使用CSS li.book裝飾條目(和不完整)

BookController { 
    def search = {SearchComamnd search -> 

    def books = [] 
    if(search) { 
     books = Book.createCritera().list { 
     and { 
      title(search.title) 
      author(search.title) 
     } 
     } 
    } 

    render [ books:books ] 
    } 

    class SearchCommand { 
    def author 
    def title 
    } 
} 

,然後當。

+0

@Gonzo我刪除了resultsHere DIV因爲它是沒有意義的,IMO是最好有形式之外的結果(如你建議) – 2011-05-16 15:29:08

+0

你需要添加字段形成,使用戶可以輸入搜索參數 – 2011-05-16 15:29:54

+0

@絕對正確......但這並不意味着完整(或獨立工作) – 2011-05-16 15:55:53