0

簡単に言うと、サーブレット変数をJSPページに表示することができません。私は次のような方法を試しました

 <p><$= request.getAttribute("foo") %></p>

と同様

  <p>"${foo}"</p>

上部のページをインポートします。

私のサーブレット(テスト変数がどこにあるか、下に向かってコメント):

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
{
    //String that gets returned as HTML
    StringBuilder returnAsHTML = new StringBuilder();

    //Cycles through the parameter(s) sent from the serialized form
    Enumeration<String> parameterNames;

    //Holds all of the parameter(s) values
    LinkedList<String> valuesIn = new LinkedList<String>();

    //Gets all of the parameter names from the serialized form
    parameterNames = request.getParameterNames();

    //Iterate through the enumeration of the parameters
    while(parameterNames.hasMoreElements())
    {
        String currentParameter = parameterNames.nextElement();
        String currentValue = request.getParameter(currentParameter);

        //Prevent a blank value from being added from the text fields (which is what they default to
        //if the user didn't enter anything for "Section:" or "Teacher:").
        if(!currentValue.contentEquals(""))
        {
            valuesIn.add(currentValue);
        }//Else doNothing();
    }

    //Set the section to query, if the user wanted one to search for
    if(request.getParameter("section").isEmpty())
    {
        sectionToQuery = "";
    }
    else
    {
        sectionToQuery = request.getParameter("section").toUpperCase();
    }

    //Set the teacher to query, if the user wanted one to search for
    if(request.getParameter("teacher").isEmpty())
    {
        teacherToQuery = "";
    }
    else
    {
        teacherToQuery = request.getParameter("teacher").toUpperCase();
    }

    //THIS BEGINS THE QUERY - BE SURE TO BREAK THIS DOWN TO OTHER METHODS

    //STAGE 1 See what semesters they are needing, eliminate the ones they don't need.
    resultSet = determineSemesters(valuesIn);

    //STAGE 2 See what locations they are needing, eliminate the ones they don't need.
    determineLocations(resultSet, valuesIn);

    //STAGE 3 See what sections they are needing, eliminate the ones they don't need.
    determineSections(resultSet, valuesIn);

    //STAGE 4 See what instructors they are needing, eliminate the ones they don't need.
    determineInstructors(resultSet, valuesIn);

    //STAGE 5 See if they want to include closed classes or not, eliminate what they don't need.
    determineClosedOrNotClosedCourses(resultSet, valuesIn);

    //SEARCH IS DONE, the remaining elements in "resultSet" are the product of their search. Find
    //The enrollment and the credits that is in resultSet.

    //THIS IS WHERE I AM TESTING IT////////////////
    int foo = 20;
    request.setAttribute("foo", foo);

    //Check to see if the result set is empty
    if(resultSet.isEmpty())
    {
        returnAsHTML.setLength(0);
        returnAsHTML.append("<tr><td colspan='15'><h1>No Results...</h1></tr>");
    }
    else//It's not empty, so style the classes.
    {
        //Make sure results are sorted
        Collections.sort(resultSet);

        //Style all the classes
        for(ClassInfo classes : resultSet)
        {
           returnAsHTML.append(styleClass(classes));
        }//End styling of classes
    }

    //Send back the result
    response.getWriter().write(returnAsHTML.toString());

}

JSPを初めて使用するので、いくつかのアイデアがあります。私が見た例では、人々は、ページをリダイレクトまたは転送する際に、response.sendRedirect()またはそれらの線に沿った何かを使用しているようです。もう1つは、intを文字列としてキャストしていないためかもしれません。何かご意見は?

4

2 に答える 2

1

まず、サーブレットを適切な JSP ページにリダイレクトするには、次のようにRequestDispatcherを使用する必要があります。

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

値を取得するには、次を使用する必要があります。

<p><%= request.getAttribute("foo") %></p>

しかし、これは古くて正しくない方法です。JSP ページでスクリプトレットを使用することは避けてください。そのための表現言語があります。例:

<p>
   <c:out value="${requestScope['foo']}"/>
</p>

以下も参照してください。

于 2013-02-12T21:06:22.393 に答える
0

doGet() 実装でこれを試してください。

protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
    Object data = "Some data, can be a String or a Javabean";
    request.setAttribute("data", data);
    request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
}

次に、JSP で次のようにします。

<p>The data from servlet: ${data}</p>

それが役立つことを願っています!

于 2013-02-12T21:07:15.370 に答える