2016-04-22 2 views
0

У меня возникли проблемы с созданием веб-форума с использованием грааля. В моем контроллере мне нужно создать стандартную тему для работы на сайте, я использую код учебника. Поэтому мой вопрос: как создать стандартную тему для работы этого кода?Создание стандартной темы

Та часть, которая мне нужно создать это в строке 11.

Контроллер:

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

Немного неясно, о чем вы спрашиваете. Вы создаете веб-форум и не знаете, как установить тему по умолчанию? Что именно означает тема в этом контексте? Является ли тема просто названием должности - или это категория сообщений? –

+0

Да, английский не мой первый язык, жаль об этом, но я пытаюсь создать начальный экземпляр моего класса класса «Тема». 'Тема' - категория сообщений –

ответ

0

в настоящее время вы пытаясь сначала найти экземпляр класса домена Topic, соответствующий предоставленному topicId, а затем вы проверите, является ли тема нулевой.

Это проблема, так, как будто topicId имеет значение NULL, поиск завершится ошибкой и вызовет исключение нулевого указателя.

Чтобы исправить это, вы просто оберните поиск в if-null, как показано ниже, чтобы убедиться, что у вас действительно есть действительный topicId.

Ваш другой вопрос (как установить значение по умолчанию) несколько интуитивно понятен. Если тема не найдена, просто создайте ее со стандартным конструктором по умолчанию или укажите пары ключ: значение для конструктора. [см. приведенный ниже код]. Для получения дополнительной информации о системе реляционного сопоставления объектов Grails вы должны указать their documentation.

def topic(long topicId) { 
    Topic topic 

    /* If you have a valid topicId perform a lookup. */ 
    if (topicId != null){ 
     topic = Topic.get(topicId) 
    } 

    /* If the topic hasn't been set correctly, create one with default values. */ 
    if (topic == null) { 
     topic = new Topic() 
     /* You may want to have a look at the grails docs to see how this works. */ 
     toipic = new Topic(name: "Default", priority: "Highest") 
    } 

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

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

Ваш вопрос не совсем ясно, но если вы спрашиваете, как создать первоначальный экземпляр вашей Topic доменный класс (так что вы можете загрузить его в thread действия), вы могли бы сделать это в 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) 
} 
Смежные вопросы