Можно ли управлять циклом (для каждого) нажатием кнопки на странице JSP?

Я пытаюсь создать викторину вопрос/ответ, в которой есть варианты ответов с несколькими вариантами ответов (в переключателях) на вопрос. Я хочу отображать один вопрос и соответствующий набор ответов за раз. Как выполнить итерацию по списку с помощью элемента управления, чтобы при щелчке по нему отображался следующий вопрос и ответы?

    <form action="/addStuResponse" method="post">       
        
        <c:forEach items="${qlist}" var="question"  varStatus="loopCounter">    
        
            <input type="hidden" name="quesSet" value="${question.quesId}">     
            <textarea rows="3" cols="5" readonly="readonly">${question.quesText}</textarea>
            
            <c:forEach items="${anslist}" var="answer">
                <c:if test="${answer.questions.quesId == question.quesId}">
                    
                    <input type="radio" name="response" value="${answer.answer}">                           
                
                </c:if>
            </c:forEach>
        </c:forEach>
        
            <button type="submit" >Next</button>
    </form>

person Tony    schedule 06.07.2020    source источник
comment
вы можете добавить некоторые скрытые входы, где вы можете хранить значение next идентификатора вопроса внутри формы. Таким образом, при отправке вы можете получить это значение, используя ${param.yourqid}, передать его в свой цикл и показать только этот вопрос   -  person Swati    schedule 06.07.2020
comment
Мне очень жаль, но я не понимаю.   -  person Tony    schedule 06.07.2020
comment
Вы должны представить форму на каждый вопрос?   -  person Swati    schedule 07.07.2020
comment
Да, я знаю, это означает, что вы нажимаете номер контроллера (длинный список вопросов) раз.   -  person Tony    schedule 07.07.2020
comment
Таким образом, вы можете просто показать первый вопрос внутри form и добавить одно поле hiddeninput, в котором будет отображаться id следующего вопроса, поэтому при отправке вы можете получить скрытое входное значение и передать его в свой цикл и отобразить только требуемый вопрос. то же самое, пока вы не дойдете до последнего вопроса. Это один из способов сделать это, а другой способ показан в ответе @Pradyskumar.   -  person Swati    schedule 07.07.2020


Ответы (1)


Держите флажок isCurrentQuestionна каждом вопросе. Установите флаг первого вопроса на true, а флаг остальных вопросов на false. При нажатии следующей кнопки измените флаг isCurrentQuestion на false для первого вопроса и сделайте второй вопрос истинным. и так далее до последнего вопроса.

Измените код, как показано ниже:

 <form action="/addStuResponse" method="post">       
        
        <c:forEach items="${qlist}" var="question"  varStatus="loopCounter">    
          <c:if test="${question.isCurrentQuestion == true}">
            <input type="hidden" name="quesSet" value="${question.quesId}">     
            <textarea rows="3" cols="5" readonly="readonly">${question.quesText}</textarea>
            
            <c:forEach items="${anslist}" var="answer">
                <c:if test="${answer.questions.quesId == question.quesId}">
                    
                    <input type="radio" name="response" value="${answer.answer}">                           
                
                </c:if>
            </c:forEach>
          </c:if>
        </c:forEach>
        
            <button type="submit" >Next</button>
    </form>
person Pradyskumar    schedule 06.07.2020
comment
Это было больно... очень. - person Tony; 10.07.2020