2013-03-13 77 views
1

在我的Grails Web應用程序中,我有一個彈出式對話框,允許我輸入某種類型的自然語言表達式,它將用於在應用程序中執行某些操作。創建錯誤條件並將它們傳回給客戶端

我目前在groovy中實現瞭解析器,並想知道如何去創建錯誤消息並將它們返回給客戶端。

我正在考慮使用<g:formRemote>,它將使用ajax將文本字符串發送到解析器,並且在成功解析字符串時,它將執行應用程序中的動作,比如將用戶添加到項目中,通常跟着一個重定向到一個新頁面,比如說向用戶顯示該項目的一部分。如果解析器收到一個令牌並不期望/識別,或者如果該字符串沒有遵循正確的語法,我就可以創建一條錯誤消息並將其發送回客戶端,從而允許用戶嘗試另一個命令。

到目前爲止,我的代碼看起來像這樣..

在我的控制器接收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 2013-03-13 13:03:25

+0

我想知道創建錯誤消息的最佳方式以及將它們發送回客戶端的最佳方法。我是否創建自己的例外? – 2013-03-13 13:26:07

+1

所以在ajax調用中,您可以返回錯誤代碼和文本。例如:'response.status = 400'' render「無法匹配標籤」'。 – 2013-03-13 13:35:33

回答

0

得到它的工作,

在控制器

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

然後在我的遠程形式

onFailure="doSomething(XMLHttpRequest)" 

然後在JavaScript中通過

XMLHttpRequest.responseText 
相關問題