为什么我得到的地图类型不匹配作为路由参数?
Why do I get a type mismatch for a map as a routing parameter?
我正在使用 playframework 2.3.8 并且有一个视图-class。里面有一个按钮:
<button class="btn btn-default" type="button" onclick="@routes.Application.sendMap(myMap)" method="POST">Send</button>
我想在我的控制器中的地图上附加一个问题/答案对 class (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));
}
在我的 routes.conf 中,我已经将路由添加到控制器 class 并使用 Map
作为参数:
POST /QuestionMap controllers.Application.sendMap(Map)
但现在我收到错误:
type mismatch;
found : String
required: java.util.Map[model.Question,java.util.List[model.Answer]]
为什么地图会转换成字符串?
默认参数类型为字符串:"For parameters of type String, the parameter type is optional." Documentation Play. You can also take a look there: How to create Map - post on Stack Overflow。您应该创建正确的模板,然后通过配置文件中方法中的参数传递它
我已经搞定了几乎完全现在正在工作......虽然我不完全明白如何:
视图中的我的按钮-class,现在没有任何参数
<a href="@routes.Application.sendMap()"><button class="btn btn-default" type="button">Absenden</button>
我的控制器-class 现在可以正确地将另一个 fake question/answer 对放入地图中,然后 returns 它与更改后的地图index.scala.html:
return ok(views.html.index.render(myMap));
最重要的部分发生在 routes.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()
它指向Application.java中的index()-方法。在那里我有另一个方法叫做 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!
有办法吗?如果是的话,我的问题就彻底解决了。
我正在使用 playframework 2.3.8 并且有一个视图-class。里面有一个按钮:
<button class="btn btn-default" type="button" onclick="@routes.Application.sendMap(myMap)" method="POST">Send</button>
我想在我的控制器中的地图上附加一个问题/答案对 class (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));
}
在我的 routes.conf 中,我已经将路由添加到控制器 class 并使用 Map
作为参数:
POST /QuestionMap controllers.Application.sendMap(Map)
但现在我收到错误:
type mismatch;
found : String
required: java.util.Map[model.Question,java.util.List[model.Answer]]
为什么地图会转换成字符串?
默认参数类型为字符串:"For parameters of type String, the parameter type is optional." Documentation Play. You can also take a look there: How to create Map - post on Stack Overflow。您应该创建正确的模板,然后通过配置文件中方法中的参数传递它
我已经搞定了几乎完全现在正在工作......虽然我不完全明白如何:
视图中的我的按钮-class,现在没有任何参数
<a href="@routes.Application.sendMap()"><button class="btn btn-default" type="button">Absenden</button>
我的控制器-class 现在可以正确地将另一个 fake question/answer 对放入地图中,然后 returns 它与更改后的地图index.scala.html:
return ok(views.html.index.render(myMap));
最重要的部分发生在 routes.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()
它指向Application.java中的index()-方法。在那里我有另一个方法叫做 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!
有办法吗?如果是的话,我的问题就彻底解决了。