2013-03-13 1 views
1

В моем веб-приложении Grails у меня есть всплывающее диалоговое окно, которое позволяет мне вводить выражение типа натурального языка, которое будет использоваться для выполнения некоторых действий в приложении.Создание условий ошибки и передача их обратно клиенту

Я в настоящее время реализую синтаксический анализатор в groovy и задавался вопросом, как я собираюсь создавать сообщения об ошибках и возвращать их клиенту.

Я думал об использовании <g:formRemote>, который будет использовать ajax для отправки строки текста в синтаксический анализатор и при успешном анализе строки он выполнит действие в приложении, скажем, чтобы добавить пользователя в проект, обычно за которым следует перенаправление на новую страницу, скажем, чтобы показать пользователю часть проекта. Если парсер получает маркер, он не ожидает/не распознает, или если строка не соответствует правильной грамматике, я должен был создать сообщение об ошибке и отправить его клиенту, чтобы пользователь мог попробовать другую команду.

Пока мой код выглядит следующим образом ..

В моем контроллере для приема запроса Аякса

def runTemp() 
{ 
    def tokenizer = new Tokenizer() 
    def posTagger = new PartOfSpeechTagger() 

    def words = tokenizer.getTokens("add user"); 
    def taggedWords = posTagger.tagWords(words) 

    taggedWords.each{ 
     println"${it.word} : ${it.partOfSpeech}" 
    }  
} 

и мой PartOfSpeechTagger.groovy выглядит

package uk.co.litecollab.quickCommandParser 

class PartOfSpeechTagger { 

def lexicons = [ 
    //VERBS 
    'add': PartOfSpeech.VERB, 
    'new': PartOfSpeech.VERB, 
    'create': PartOfSpeech.VERB, 
    'view': PartOfSpeech.VERB, 
    'delete': PartOfSpeech.VERB, 
    'logout': PartOfSpeech.VERB, 
    'remove': PartOfSpeech.VERB, 
    'chat': PartOfSpeech.VERB, 
    'accept': PartOfSpeech.VERB, 
    'active': PartOfSpeech.VERB, 
    'suspend': PartOfSpeech.VERB, 
    'construct': PartOfSpeech.VERB, 
    'close': PartOfSpeech.VERB, 
    'add': PartOfSpeech.VERB, 

    //NOUNS 
    'project': PartOfSpeech.NOUN, 
    'user': PartOfSpeech.NOUN, 
    'task': PartOfSpeech.NOUN, 
    'chat': PartOfSpeech.NOUN, 
    'conversation': PartOfSpeech.NOUN, 

    //DETERMINERS 
    'a': PartOfSpeech.DETERMINER, 
    'the': PartOfSpeech.DETERMINER, 

    //PREPOSITIONS 
    'to': PartOfSpeech.PREPOSITION, 
    'from': PartOfSpeech.PREPOSITION, 
    'for': PartOfSpeech.PREPOSITION, 
    'with': PartOfSpeech.PREPOSITION  
    ] 


//constructor 
def PartOfSpeechTagger() 
{ 

} 

def tagWords(String[] words) 
{ 
    def taggedWords = [] as ArrayList 
    words.each{ 
     //removing the use of 'it' due to nested closures 
     println"word to search for : ${it}" 
     def word = it 
     if(inLexicons(word)) 
     { 
      println"word :: ${it}" 
      taggedWords.add(
       new TaggedWord(
        lexicons.find{it.key == word}.key, 
        lexicons.find{it.key == word}.value) 
       )   
     } 
     else 
     { 
      /* 
      * handle errors for not finding a word? 
      */ 
     } 
    } 

    return taggedWords 
} 

def inLexicons(key) 
{ 
    return lexicons.containsKey(key) 
} 
} 

вы можете увидеть в метод tagWords, где я хочу иметь возможность сообщить клиенту, что слово, которое было предоставлено, не ожидалось.

+1

Итак, что это вопрос? – eugene82

+0

Я хочу знать лучший способ создания сообщений об ошибках и лучший способ отправить их обратно клиенту. Создать собственные исключения? –

+1

Таким образом, при вызове ajax вы можете вернуть код ошибки и текст. Пример: 'response.status = 400'' render "Не удалось совместить тег" '. –

ответ

0

Понял работает,

В контроллере

render(status: 400, text: "the message") 

тогда в моей дистанционной форме

onFailure="doSomething(XMLHttpRequest)" 

затем доступ к этим в JavaScript с помощью

XMLHttpRequest.responseText