package mypackage; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.RadioChoice; import org.apache.wicket.model.Model; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.request.mapper.parameter.PageParameters; public class Quiz extends WebPage { private static final long serialVersionUID = 1L; int number = 0, score = 0; ArrayList questions = new ArrayList(); ArrayList results = new ArrayList(); String answer; Label messageLabel, textLabel; RadioChoice radio; Form submitForm; public Quiz(final PageParameters parameters) { super(parameters); try { loadQuiz(); } catch (IOException e) { /* 本来は何かエラーを表示する */ } messageLabel = new Label("message", new Model()); messageLabel.setEscapeModelStrings(false); // タグをエスケープしない add(messageLabel); textLabel = new Label("text", new Model()); add(textLabel); submitForm = new Form("submitForm"){ private static final long serialVersionUID = 1L; @Override protected void onSubmit() { String answer = radio.getModelObject(); String[] tokens = questions.get(number++); String right = tokens[Integer.parseInt(tokens[tokens.length-1])]; String check; if (answer.equals(right)) { score++; updateMessage("

正解です。

"); check = "○"; } else { updateMessage(String.format("

残念でした。あなたの選択は%s、正解は%sでした。

", answer, right)); check = "×"; } results.add(new String[] {""+number, tokens[0], answer, right, check} ); } }; radio = new RadioChoice("radio", new Model(), new ArrayList()); submitForm.add(radio); add(submitForm); updateMessage("

ようこそ、Quiz へ!
では最初の問題です。

"); } private void loadQuiz() throws IOException { ServletContext servletContext = WebApplication.get().getServletContext(); File f = new File(servletContext.getRealPath("/WEB-INF/quiz.txt")); BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8")); String line=""; while((line=in.readLine())!=null) { line = line.trim(); if(line.trim().equals("")) continue; questions.add(line.split("\\s+")); } in.close(); } private void updateMessage(String message) { if (number >= questions.size()) { Result resultPage = new Result(null); message += String.format("

これで QUIZ は終わりです。正解は %d 問でした。

", score); resultPage.messageLabel.setDefaultModelObject(message); resultPage.listView.setModelObject(results); setResponsePage(resultPage); } else { messageLabel.setDefaultModelObject(message); String[] tokens = questions.get(number); textLabel.setDefaultModelObject(String.format("第 %d 問: %s", number+1, tokens[0])); List options = new ArrayList(); for (int i=1; i