Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 重定向到页面一定次数-Spring引导_Forms_Spring Boot_Spring Mvc_Redirect_Thymeleaf - Fatal编程技术网

Forms 重定向到页面一定次数-Spring引导

Forms 重定向到页面一定次数-Spring引导,forms,spring-boot,spring-mvc,redirect,thymeleaf,Forms,Spring Boot,Spring Mvc,Redirect,Thymeleaf,我正在尝试制作一个测验创建应用程序。 在开始时,我要求用户输入测验标题、描述和测验中包含的问题数量。 根据问题的数量,我想将用户重定向到“问题和答案”页面。我想添加另一个名为'count'的变量,该变量将保留页面的访问次数,以便显示“下一步”或“提交”按钮 我不知道如何计算页面重定向的次数,以及如何根据问题的数量将代码重定向到某个页面 这是QuizController类中的savequick方法: @PostMapping("/saveQuiz/{cid}")

我正在尝试制作一个测验创建应用程序。 在开始时,我要求用户输入测验标题、描述和测验中包含的问题数量。 根据问题的数量,我想将用户重定向到“问题和答案”页面。我想添加另一个名为'count'的变量,该变量将保留页面的访问次数,以便显示“下一步”或“提交”按钮

我不知道如何计算页面重定向的次数,以及如何根据问题的数量将代码重定向到某个页面

这是QuizController类中的savequick方法:

    @PostMapping("/saveQuiz/{cid}")
    public String saveQuiz(@PathVariable("cid") Long cid, @Valid @ModelAttribute Quiz quiz, 
            Model model, @RequestParam("questionNumber") int noOfQuestions) throws ParseException {

        Chapter chapter = chapterService.findChapterById(cid);
        quiz.setQuizName(quiz.getQuizName());
        quiz.setGuidelines(quiz.getGuidelines());
        quiz.setChapter(chapter);
        quizService.saveQuiz(quiz);
        
        model.addAttribute("quiz", quiz);
        model.addAttribute("noOfQuestions", noOfQuestions);
        
        return "redirect:/add_quiz_questions/"+quiz.getId();
    }
然后在我的QuestionController类中,我有以下方法

@Controller
public class QuestionController {
    
    @Autowired
    QuizService quizService;
    
    @Autowired
    QuestionService questionService;
    
    @Autowired
    AnswerService answerService;
    
    private static int count = 0;

@GetMapping("/add_quiz_questions/{qid}")
    public String addQuestions(@PathVariable("qid") Long qid, Model model) {
        count++;
        Quiz quiz = quizService.findQuizById(qid);
        model.addAttribute("quiz", quiz);
        model.addAttribute("count", count);

        return "add_quiz_questions";
    }
    
    @PostMapping("/saveQuizQuestion/{qid}")
    public String saveQuestions(@PathVariable("qid") Long qid, @Valid @ModelAttribute QuizForm quizForm, 
            Model model, @RequestParam("noOfQuestions") int noOfQuestions) throws ParseException {
        
        Quiz quiz = quizService.findQuizById(qid);
        
        Question question = new Question();
        question.setQuestion(quizForm.getQuestion());
        
        //Add answers
        Set<Answer> answers = new HashSet<>();
        Answer a = new Answer();
        a.setAnswer(quizForm.getOption1());
        a.setCorrect(1);
        answers.add(a);
        
        a.setAnswer(quizForm.getOption2());
        a.setCorrect(0);
        answers.add(a);
        
        a.setAnswer(quizForm.getOption3());
        a.setCorrect(0);
        answers.add(a);
        answerService.saveAnswers(answers);
        question.setAnswers(answers);
        questionService.saveQuestion(question);
        
        Chapter chapter = quiz.getChapter();
        Course course = chapter.getCourse();        
        Set<File> files = chapter.getFiles();
        int nrFiles = files.size(); 
        model.addAttribute("chapter", chapter);
        model.addAttribute("course", course);
        model.addAttribute("files", files);
        model.addAttribute("numberOfFiles", nrFiles);
        model.addAttribute("quiz", quiz);
        
        if(count == noOfQuestions) //check if the page has been redirected as many times as there were questions then redirect to chapter page

            return "redirect:/chapter_details/"+chapter.getId();
        else 
            return "redirect:/add_quiz_questions/"+quiz.getId();
    }
}
@控制器
公共类问题控制器{
@自动连线
QuizService QuizService;
@自动连线
提问服务提问服务;
@自动连线
应答服务;
私有静态整数计数=0;
@GetMapping(“/add\u quick\u questions/{qid}”)
公共字符串addQuestions(@PathVariable(“qid”)长qid,模型){
计数++;
quick-quick=quizService.findquizbyd(qid);
model.addAttribute(“测验”,测验);
model.addAttribute(“count”,count);
返回“添加测验问题”;
}
@后映射(“/saveQuizQuestion/{qid}”)
公共字符串saveQuestions(@PathVariable(“qid”)长qid,@Valid@modeldattribute QuizForm QuizForm,
模型模型@RequestParam(“noOfQuestions”)int noOfQuestions)引发异常{
quick-quick=quizService.findquizbyd(qid);
问题=新问题();
question.setQuestion(quizForm.getQuestion());
//添加答案
Set answers=new HashSet();
答案a=新答案();
a、 setAnswer(quizForm.getOption1());
a、 设置正确(1);
答复.添加(a);
a、 setAnswer(quizForm.getOption2());
a、 设置正确(0);
答复.添加(a);
a、 setAnswer(quizForm.getOption3());
a、 设置正确(0);
答复.添加(a);
应答服务。保存应答(应答);
问题.答案(答案);;
questionService.saveQuestion(问题);
Chapter Chapter=quick.getChapter();
课程=chapter.getCourse();
Set files=chapter.getFiles();
int nrFiles=files.size();
model.addAttribute(“章”,章);
model.addAttribute(“课程”,课程);
model.addAttribute(“文件”,files);
model.addAttribute(“numberOfFiles”,nrFiles);
model.addAttribute(“测验”,测验);
if(count==noOfQuestions)//检查页面重定向的次数是否与出现问题的次数相同,然后重定向到章节页面
返回“重定向:/chapter_details/”+chapter.getId();
其他的
return“重定向:/add_quick_questions/”+quick.getId();
}
}
这是Thymeleaf页面:

<!DOCTYPE html>
<html lang="en"
    xmlns:th="http://www.thymeleaf.org"
    xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
    
    <div class="card">
    
        <h5 class="card-header info-color white-text text-center py-4">
            <strong>Quiz questions</strong>
        </h5>
    
        <div class="card-body px-lg-5">
    
            <!-- Form -->
            <form class="text-center" style="color: #757575;"  th:action="@{/saveQuizQuestion/{qid}(qid=${quiz.id})}" method="post" th:object="${quizForm}">
    
                <p>Create your quiz</p>
    
                <!-- Question -->
                <div class="md-form mt-3">
                    <input type="text" id="question" class="form-control" name="question">
                    <label for="question">Question</label>
                </div>
    
                <!-- Right answer -->
                <div class="md-form">
                    <input type="text" id="ans1" class="form-control" name="option1">
                    <label for="ans1">Answer 1</label>
                </div>
                
                <!-- Answer 2 -->
                <div class="md-form">
                    <input type="text" id="ans2" class="form-control" name="option2">
                    <label for="ans2">Answer 2</label>
                </div>
                
                <!-- Answer 3 -->
                <div class="md-form">
                    <input type="text" id="ans3" class="form-control" name="option3">
                    <label for="ans3">Answer 3</label>
                </div>
                
                <input type="hidden" th:value="${count}" name="count"/>
                <input type="hidden" th:value="${noOfQuestions}" name="noOfQuestions"/>         
                
                <button th:if="${noOfQuestions < count}" class="btn btn-outline-info btn-rounded btn-block z-depth-0 my-4 waves-effect" type="submit">Next</button>
                <button th:if="${noOfQuestions == count}" class="btn btn-outline-info btn-rounded btn-block z-depth-0 my-4 waves-effect" type="submit">Submit</button>
                
            </form>
            <!-- Form -->
    
        </div>
    
    </div>
</html>

测验问题
创建您的测验

问题: 答复1 答复2 答复3 下一个 提交
我相信我使用count变量的方式是错误的,但它只是给出一个想法。如果有人能帮我澄清我的问题,我将不胜感激。
提前感谢。

您可以在使用@SessionAttribute annotation的会话中创建计数变量。 无论何时他们提交,您都会再次将count变量设置为默认值