Опрос на той же странице JSP - PullRequest
       18

Опрос на той же странице JSP

1 голос
/ 13 сентября 2011

У меня проблема с созданием одного приложения.Например, у меня есть список или массив строк - это вопросы.У меня есть страница с сервлетами и JSP, на странице JSP есть кнопка «Далее», когда один вопрос должен быть напечатан в JSP во время нажатия следующей кнопки.

Пожалуйста, дайте мне несколько советов, как мне это сделать?сделать эту работу.

У меня есть класс действий Struts, в котором у меня есть код для размещения вопроса:

public class SecondWriteAction extends Action {

    /**
     * 
     */
    private static final String SUCCESS = "success";

    /**
     *
     */
    protected int count = 0;

    /**
     * 
     */
    protected Collection<QuestionsBean> questionsBeansCollection = new ArrayList<QuestionsBean>();

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        HttpSession session = request.getSession();

        if (session.getAttribute("questioningTimeCount") == null){
            session.setAttribute("questioningTimeCount", request.getParameter("timeCount"));
        }

        int timeCount = Integer.parseInt(session.getAttribute("questioningTimeCount").toString());

        WriteFormBean formBean = (WriteFormBean) form;
        QuestionsBean questionsBean = new QuestionsBean();

        questionsBean.setSentence(formBean.getQuestion());
        questionsBeansCollection.add(questionsBean);

        if (session.getAttribute("countFromJsp") != null) {
            int countFromJsp = Integer.parseInt(session.getAttribute("countFromJsp").toString());

            if (countFromJsp == 1){
                session.setAttribute("questionsBeansCollection", questionsBeansCollection);
            }

            if (countFromJsp <= 0) {
                questionsBeansCollection.clear();
                questionsBeansCollection = new ArrayList<QuestionsBean>();
                count = 0;
            }
        }

        QuestionsHandler handler = QuestionsHandler.getInstance(request.getSession().getServletContext().getRealPath("/data/sentences_" + timeCount));

        count = count + 1;
        request.setAttribute("question", handler.getQuestions().get(count));
        request.setAttribute("count", count);

        RequestDispatcher rd = request.getRequestDispatcher("/student/secondWrite.jsp");
        rd.forward(request, response);

        return mapping.findForward(SUCCESS);
    }
}

На странице JSP я считаю их, и когда опрос завершен, я пытаюсьпереслать на другую страницу JSP.

<%
    if (request.getAttribute("count") != null){

        int count = 11 - Integer.parseInt(request.getAttribute("count").toString());
        out.print("<p>Liko klausimų: " + count + "</p>");
        session.setAttribute("countFromJsp", count);
        if (count == 0){                                            
            if (Integer.parseInt(session.getAttribute("questioningTimeCount").toString()) > 1){                                                
                %>
                <script type="text/javascript">
                        $.post('update', function(data) {});
                </script>                                                
                <%                                                                                                
            } else {   
                //response.sendRedirect("content/informantForm.jsp");                                                                                          
                //RequestDispatcher rd = request.getRequestDispatcher("/content/informantForm.jsp");
                //rd.forward(request, response);
            }
        }
    }
%>

Проблема в том, что я не могу.Если я использую RequestDispatcher на странице JSP, я получаю исключение

не может переслать после того, как ответ был передан

Если я пытаюсь получить доступ к сервлету с помощью jQuery, все в порядке, ноRequestDispacher не работает, и я не могу перенаправить на другое событие JSP из сервлета.

Есть идеи почему?

1 Ответ

0 голосов
/ 13 сентября 2011

Если я использую RequestDispatcher на странице JSP, я получаю исключение

cannot forward after responce has been commited

JSP как технология представления неявно является частью HTTP-ответа. Каждая строка шаблона в JSP записывается в ответ. Чтобы иметь возможность изменить ответ, ответ должен быть полностью нетронутым и пустым. Но это не обязательно так внутри JSP.

Переместите этот Java-код в класс действия или сервлета, который будет запускаться задолго до JSP. Код Java не в любом случае принадлежит файлам JSP.

...