Почему я получаю несоответствие типов для карты в качестве параметра маршрутизации?
Я использую playframework 2.3.8 и у меня есть View-класс. Там есть кнопка:
<button class="btn btn-default" type="button" onclick="@routes.Application.sendMap(myMap)" method="POST">Send</button>
Я хочу добавить пару вопросов / ответов на карту в моем классе контроллера (Application.java):
public static Result sendMap(Map<Question, List<Answer>> sendMap){
Question question4 = new Question("ertw", "SendMap Question?", 34, "Tim");
Answer answer41 = new Answer("werw", "ertw", "SendMap Answer 1!", 12, "Oliver");
Answer answer42 = new Answer("tzsdfu", "ertw", "SendMap Answer 2!", 1, "Marcus");
List<Answer> answerList4 = new ArrayList<Answer>();
answerList4.add(answer41);
answerList4.add(answer42);
sendMap.put(question4, answerList4);
return ok(views.html.frageAntwort.render(sendMap));
}
В моем rout.conf я добавил маршрут к классу контроллера и использую Map
в качестве параметра:
POST /QuestionMap controllers.Application.sendMap(Map)
Но теперь я получаю ошибку:
type mismatch;
found : String
required: java.util.Map[model.Question,java.util.List[model.Answer]]
Почему карта конвертируется в строку?
2 ответа
У меня это почти полностью работает сейчас... хотя я не совсем понимаю, как:
Моя кнопка в view-классе, теперь без каких-либо параметров
<a href="@routes.Application.sendMap()"><button class="btn btn-default" type="button">Absenden</button>
Мой контроллер-класс теперь корректно помещает другую поддельную пару вопросов / ответов в карту, а затем возвращает ее с измененной картой в index.scala.html:
return ok(views.html.index.render(myMap));
Самая важная часть происходит в route.conf:
GET / controllers.Application.index()
GET /Fragenliste controllers.Application.sendMap()
GET /FrageStellen controllers.Application.askQuestion()
GET /Einstellungen controllers.Application.showSettings()
GET /Quiz controllers.Application.startQuiz()
sendMap () теперь не имеет параметров и указывает на другой сайт с именем /Fragenliste
, И есть часть, которую я не до конца понимаю - если я использую
GET / controllers.Application.sendMap()
это указывает на index()- метод в Application.java. Там у меня есть еще один метод с именем initialize():
public static Result index() {
initialize();
(...)
}
public static void initialize() {
Question question1 = new Question("xyz", "Do Androids dream?", 127, "Marcus");
Answer answer11 = new Answer("zab", "xyz", "Only of electric sheep!", 70, "Tibor");
Answer answer12 = new Answer("qwert", "xyz", "No, they dont!", 10, "Sarah");
List<Answer> answerList1 = new ArrayList<Answer>();
answerList1.add(answer11);
answerList1.add(answer12);
myMap.clear();
myMap.put(question1, answerList1);
}
В этом карта построена, после того как я очистил потенциальные остатки старых карт. Таким образом, мой маршрут указывает на индекс, и теперь новый вопрос не добавляется! Почему я не могу указать на индекс, а он все еще работает?
В принципе:
mysite.com/ = index ... user presses button for new question, gets transfered to
mysite.com/enterQuestion ... user enters question and hits "submit", gets transfered to
mysite.com/ = index
Мое решение на данный момент:
mysite.com/ = index ... user presses button for new question, gets transfered to
mysite.com/enterQuestion ... user enters question and hits "submit", gets transfered to
mysite.com/ANOTHER_SITE != index, but looks and works exactly like the index!
Есть ли способ сделать это? Если да, моя проблема будет полностью решена.
Тип параметров по умолчанию: String: "Для параметров типа String тип параметра является необязательным". Документация Play. Вы также можете посмотреть там: Как создать карту - разместить в Stack Overflow. Вы должны создать правильный шаблон и затем передать его через параметр в вашем методе в файле конфигурации