【问题标题】:Questioning in the same JSP page在同一个 JSP 页面中提问
【发布时间】:2011-09-13 14:41:32
【问题描述】:

我在创建一个应用程序时遇到问题。例如,我有一个字符串行列表或数组 - 这些是问题。我有一个 servlet 和 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);
            }
        }
    }
%>

问题是我做不到。如果我在 JSP 页面中使用 RequestDispatcher 我会得到一个异常

提交响应后无法转发

如果我尝试使用 jQuery 访问 servlet,一切正常,但 RequestDispacher 不起作用,我无法从 servlet 重定向到其他 JSP 事件。

任何想法为什么?

【问题讨论】:

  • 你尝试了吗?展示你的所作所为,它会更容易为你提供帮助。

标签: jsp servlets struts


【解决方案1】:

如果我在 JSP 页面中使用 RequestDispatcher,我会得到一个异常

cannot forward after responce has been commited

作为一种视图技术的 JSP 隐含地是 HTTP 响应的一部分。 JSP 中的每个模板行都被写入响应。为了能够更改响应,响应应该完全保持原样和空白。但在 JSP 中不一定是这种情况。

将该 Java 代码移动到一个动作或 servlet 类,该类将在 JSP 之前运行很长时间。 Java 代码doesn't 无论如何都属于 JSP 文件。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2016-02-28
    • 2012-01-30
    • 2018-12-20
    • 2017-05-26
    相关资源
    最近更新 更多