我正在嘗試實現一個測驗應用程序。應用程序逐個加載ajax的問題。當用戶點擊「到下一個問題」按鈕時,他/她的答案被保存在緩存中。但是,當我調試,緩存列表始終爲空...在Play Framework中使用緩存
此代碼創建第一個緩存陣列:
public static void viewQuiz(@Required String user, @Required String test) {
if(validation.hasErrors()) {
flash.error("Hoop kullanıcı lazım…");
index();
} else{
TestClass selectedTest = TestClass.find("title", test).first();
List<String> choiceList = new ArrayList<String>();
session.put("testID", selectedTest.id);
Cache.set("choices", choiceList, "30mn");
render();
}
}
而這種代碼試圖保存答案逐一:
public static void question(@Required Long id, String answer){
Long testId = Long.parseLong(session.get("testID"));
TestClass test = TestClass.findById(testId);
List<Question> questList = Question.find("test_id", test.id.intValue()).fetch();
Question quest = questList.get(id.intValue());
if(answer != null){
List<String> choiceList= Cache.get("choices",List.class);
choiceList.add(id.intValue(), answer);
Cache.set("choices", choiceList, "30mn");
}
int count = questList.size()-1;
render(quest, count, id);
}
而這個代碼是第二次的HTML視圖:
#{extends 'main.html' /}
#{set title:'question.html' /}
<script type="text/javascript">
var questionId = ${id};
$('#nextButton').click(function(){
$('#questionDiv').html('<p><img id = "loaderGif" src="public/images/loading.gif"/></p>');
$('#questionDiv').load("/test/" + ++questionId);
});
$('#endButton').click(function(){
$('#questionDiv').html('<p><img id = "loaderGif" src="public/images/loading.gif"/></p>');
$('#questionDiv').load("/result");
});
</script>
<legend>Soru ${id+1}</legend>
<p>&{quest.question}</p>
#{list items:quest.choices, as:'choice'}
<p><input type="radio" name = "answer" id = "answer" size="30" value="${choice}"/>&{choice}</p>
#{/list}
#{if id < count}
<input id = "nextButton" name="nextButton" type="button" value="İleri"/>
#{/if}
#{else}
<input id = "endButton" name="endButton" type="button" value="Bitti"/>
#{/else}
您使用的是什麼版本的Play?您是使用標準內存緩存還是使用其他內容,如memcache。我還假設你在一臺服務器上,因爲它是開發模式,而不是多個實例之間的負載平衡。 – Codemwnci
我還應該注意到,由於Play是無狀態的,因此不應將高速緩存用作數據存儲。如果您正在進行負載平衡,則不能保證您將返回到同一臺服務器。通過記住事情,你打破了Play的無狀態性質。當數據已經存在於數據庫中時,最好使用緩存,但是用於最大限度地減少頻繁的數據庫讀取。# – Codemwnci
我正在嘗試學習遊戲。我正在使用Play 1.2.1,並且不更改任何緩存設置。我在使用mysql的Ubuntu本地主機上。 –