在我的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
方法中看到我希望能够向客户报告所提供的字词不是预期的。
答案 0 :(得分:0)
搞定了,
在控制器中
render(status: 400, text: "the message")
然后以我的远程形式
onFailure="doSomething(XMLHttpRequest)"
然后通过
在javascript中访问它XMLHttpRequest.responseText