2016-04-18 13 views
0

Ich möchte eine Suche nach meiner Grails-Web-Anwendung erstellen, aber ich habe kein Glück, die gewünschten Ergebnisse zu bekommen. Ich benutze derzeit Grails 3.0.11, nach einem Post ist das durchsuchbare Plugin veraltet, aber ich konnte das Elasticsearch Plugin nicht funktionieren. Ich entschied mich zu versuchen, findAllByTitle ("% test%") zu verwenden, ich denke, es wird funktionieren, aber ich bin mir nicht sicher, was ich falsch mache.Grails: findAllByTitle() als Suchfunktion?

Ein bestimmter Titel wird in einer lokalen Datenbank gespeichert und wenn ich in meinen Ansichten gesucht wird, möchte ich eine Liste der gespeicherten Titel anzeigen, wenn ich beispielsweise T eingeben würde, würde "Test1", "Test2" und angezeigt "Test3". Ich habe auch executeQuery() ohne Glück versucht.

Title.groovy

class Titles { 

    byte[] branchImage 
    String branchTitle 

    static constraints = { 
     branchImage(maxSize: 10 * 1024 * 1024) 
    } 
    static mapping = { 
    } 
} 

TitleController.groovy

class TitleController { 
    def search(){ 
     def results = Title.findAllByBranchTitleIlike("%Test%") 
     [results:results] 
    } 
} 

main.gsp

<body> 
    <div class="header-search"> 
    <g:form action="search"> 
     <g:textField name="search" class="search-field" value="search"/> 
      <button type="submit" class="search-submit"><i class="fa fa-search fa-lg"></i></button> 
    </g:form> 
    </div> 
</body> 

search.gsp

<body> 
    <g:each var="r" in="${results}"> 
     <li>${r.branchTitle}</li> 
    </g:each> 
</body> 

Antwort

0

Verwenden findAllBy ... statt findBy .... findBy ... variant gibt nur ein einziges Ergebnis zurück. Siehe docs.

Auch ich würde Feld 'VarTitle' zu 'VarTitle' umbenennen (oder warum nicht einfach 'Titel'). Java-Konvention verwendet keine Großbuchstaben Feld/Methode Namen.

+0

Dank für die schnelle Antwort. Ich habe Ihre vorgeschlagenen Änderungen vorgenommen und ich kann es immer noch nicht zur Arbeit bringen. – Tyler

+0

nachdem ich einen Titel suche, wenn ich zu titles/search.gsp umgeleitet werde, werden in meiner search.gsp keine Titel angezeigt, die in meiner lokalen Datenbank gespeichert werden. Sie sind definitiv dort und richtig gespeichert, aber ich kann die Titel, die ich suche nicht rendern – Tyler

+0

Wie ist Ihr Controller-Code jetzt? Wenn es immer noch Ergebnisse von Modellvariablen hinzufügt, versuche $ {results} in dein gsp (irgendwo) einzufügen und zu sehen, was ausgedruckt wird. – BhathiyaW

0

In Ihrem Controller

class TitleController { 
    def search(){ 
     def results = Title.findAllByVarTitle("%Test%") 
     render(view: "search",model: [results:results]) 
    } 
} 

sollte es tun. Wenn Sie alle Ergebnisse anstelle von einem möchten, müssen Sie findAllBy verwenden.

+0

hmm hat immer noch nicht den Trick gemacht! Ich habe es in findAllBy geändert, aber die search.gsp zeigt immer noch keine Ergebnisse, nachdem ich etwas gesucht habe. – Tyler

+0

Muss ich meine search.gsp dann auch ändern? weil es jetzt sagt, kann das Symbol 'Ergebnisse' nicht auflösen – Tyler

+0

Nur realisiert, dass Sie $ {result} in Ihrem gsp verwenden. Du solltest das zu $ ​​{r} ändern da var = "r" –

0

Sie eingegeben haben ‚Klasse Titel‘, es ist nur ein Tippfehler, aber wenn Sie es von Ihrem Code eingefügt Kopie haben Sie einen Tippfehler in Ihrem Code :)