В моем веб-приложении 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
, где я хочу иметь возможность сообщить клиенту, что слово, которое было предоставлено, не ожидалось.
Итак, что это вопрос? – eugene82
Я хочу знать лучший способ создания сообщений об ошибках и лучший способ отправить их обратно клиенту. Создать собственные исключения? –
Таким образом, при вызове ajax вы можете вернуть код ошибки и текст. Пример: 'response.status = 400'' render "Не удалось совместить тег" '. –