2015-05-04 54 views
0

我正在使用playframework 2.3.8並擁有視圖類。在那裏是按鈕:爲什麼我將地圖的類型不匹配作爲路由參數?

<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)); 
} 

在我routes.conf我已經加入該控制器類的路線,並使用Map作爲參數:

POST /QuestionMap     controllers.Application.sendMap(Map) 

但現在我得到的錯誤:

type mismatch; found : String required: java.util.Map[model.Question,java.util.List[model.Answer]]

爲什麼地圖會被轉換成字符串?

+1

這不是有效的路由配置。我不確定您希望通過網址發送「地圖」問題列表>嗎? –

+0

默認參數type是String:「對於String類型的參數,參數類型是可選的。」 https://www.playframework.com/documentation/2.1.x/JavaRouting –

+0

@ m-z:因此,routing.conf中的參數僅用於生成鏈接的結構而不用於傳輸對象?如果我刪除錯誤的參數'POST \t/QuestionMap \t \t \t controllers.Application.sendMap()'我得到一個沒有足夠參數的錯誤:'方法sendMap沒有足夠的參數:(x $ 1:java.util.Map [ model.Question,java.util.List的[model.Answer]])play.mvc.Result。 未指定的值參數x $ 1.' – hamena314

回答

0

我知道了幾乎完全現在的工作... altough我不完全瞭解:

我的按鈕在視圖級,現在不帶任何參數

<a href="@routes.Application.sendMap()"><button class="btn btn-default" type="button">Absenden</button> 

我的控制器類現在正確地提出另一個問題/答案對進入地圖,然後用變更後的映射到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方法。在那裏,我有另一種方法名爲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! 

有沒有辦法這樣做呢?如果是的話,我的問題將被完全解決。

1

默認參數type是String:「對於String類型的參數,參數類型是可選的。」 Documentation Play。你也可以看看那裏:How to create Map - post on Stack Overflow。您應該創建正確的模板,然後在你的方法使其通過參數配置文件的

+0

我不確定是否從SO鏈接的帖子中的用戶與我一樣。如果我理解正確,Aerus正嘗試將控制器級別的地圖發送到視圖級別。我也這樣做,它在我的程序中工作。不工作的事情是從視圖類發送一個地圖到控制器類來處理它,反過來呢? – hamena314

相關問題