2016-04-22 29 views
0

Ich habe einige Probleme mit der Erstellung eines Webforums mit Grails. In meinem Controller muss ich ein Standardthema für die Website-Arbeit erstellen, ich verwende einen Code eines Tutorials. Meine Frage ist also: Wie erstelle ich ein Standardthema, damit dieser Code funktioniert?Erstellen eines Standardthemas

Der Teil, den ich erstellen müssen, ist in Zeile 11.

Controller:

class ForumController { 
def springSecurityService 

def home() { 
    [sections:Section.listOrderByTitle()] 
} 

def topic(long topicId) { 
    Topic topic = Topic.get(topicId) 

    if (topic == null){ 


    } 


    params.max = 10 
    params.sort = 'createDate' 
    params.order = 'desc' 

    [threads:DiscussionThread.findAllByTopic(topic, params), 
    numberOfThreads:DiscussionThread.countByTopic(topic), topic:topic] 
} 

def thread(long threadId) { 
    DiscussionThread thread = DiscussionThread.get(threadId) 

    params.max = 10 
    params.sort = 'createDate' 
    params.order = 'asc' 

    [comments:Comment.findAllByThread(thread, params), 
    numberOfComments:Comment.countByThread(thread), thread:thread] 

} 


@Secured(['ROLE_USER']) 
def postReply(long threadId, String body) { 
    def offset = params.offset 
    if (body != null && body.trim().length() > 0) { 
     DiscussionThread thread = DiscussionThread.get(threadId) 
     def commentBy = springSecurityService.currentUser 
     new Comment(thread:thread, commentBy:commentBy, body:body).save() 

     // go to last page so user can view his comment 
     def numberOfComments = Comment.countByThread(thread) 
     def lastPageCount = numberOfComments % 10 == 0 ? 10 : numberOfComments % 10 
     offset = numberOfComments - lastPageCount 
    } 
    redirect(action:'thread', params:[threadId:threadId, offset:offset]) 
} 
} 
+2

Es ist ein bisschen unklar, was Sie fragen. Sie erstellen ein Webforum und sind unsicher, wie Sie ein Standardthema festlegen können? Was genau bedeutet Thema in diesem Zusammenhang? Ist das Thema einfach der Name eines Beitrags - oder ist es eine Kategorie von Beiträgen? –

+0

Yeah, Englisch ist nicht meine Muttersprache, tut mir leid, aber ich versuche eine erste Instanz meiner Domain Domain Klasse zu erstellen. 'Topic' ist eine Kategorie von Posts –

Antwort

0

Derzeit du bist Versuchen Sie zuerst eine Instanz der Topic-Domain-Klasse zu finden, die der angegebenen topicId entspricht, und prüfen Sie dann, ob das Topic null ist.

Dies ist ein Problem, als ob topicId null ist, die Suche fehlschlägt und eine Nullzeigerausnahme auslöst.

Um dies zu beheben, wickeln Sie die Suche einfach in eine if-null-Prüfung, wie unten angezeigt, um sicherzustellen, dass Sie tatsächlich eine gültige topicId haben.

Ihre andere Frage (wie man einen Standard setzt) ​​ist etwas intuitiver. Wenn kein Thema gefunden wird, erstellen Sie einfach einen Standardkonstruktor mit einem Standardkonstruktor oder stellen Sie dem Konstruktor Schlüssel: Wertpaare zur Verfügung. [siehe Code unten für ein Beispiel]. Weitere Informationen zum relationalen Zuordnungssystem für Grails Object finden Sie unter their documentation.

1

Ihre Frage ist ziemlich unklar, aber wenn Sie fragen, wie eine anfängliche Instanz Ihrer Topic erstellen Domain-Klasse (so dass Sie es in Ihrem thread Aktion laden können), könnten Sie tun dies in Bootstrap.groovy:

def init = { servletContext -> 
    if(!Topic.list()) { //if there are no Topics in the database... 
    new Topic(/*whatever properties you need to set*/).save(flush: true) 
}