2012-05-13 5 views
0

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

  • 1. Существует список внутри jsp для представления объектов абстрактным способом. Из этого я связываю каждый сервлет с <a href>.

     <c:forEach var="object" items="${dealer.objectList}" varStatus="status"> 
           <div class="changableElement"> 
             <jsp:include page="/Object/objectDetails.jsp"></jsp:include> 
             <a href="/MyProjekt/ObjectResolverServlet/${object.id}" id="send">Change</a> 
           </div> 
         </c:forEach> 
    

    Это прекрасно работает.

  • 2. ObjectResolverServlet снова получает объект из фона и помещает его в запрос как атрибут.

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException { 
         System.out.println("Mark #1"); 
         String objectId = request.getPathInfo().substring(1); 
         MyObject obj = dbHandler.getMyObjectById(objectId); 
         System.out.println(obj); 
         request.setAttribute("objectDetails", obj); 
         response.setContentType("text/html");   
         getServletContext().getRequestDispatcher("/MyObjectChangePage").forward(request, response) ; 
    } 
    

    На MyObjectChangePage пользователь может манипулировать детали obj.

  • 3. MyObjectChangePage состоит в основном из форм, текстовых полей и кнопок отправки, которые направляются на другой сервлет.

    <form id="object_change_values_form" action="ObjectChangeServlet" method="post" > 
        <div> 
         <label for="name">Name:</label><br> 
         <input id="name" name="name" type="text" value="${obj.name}" /> 
         <span id="nameDetails"bla bla ..</span> 
        </div> 
    
        <div> 
         <label for="origin"Origin:</label><br> 
         <input id="origin" name="origin" type="text" value="${obj.origin}" /> 
         <span id="originDetails">bla bla ../span> 
        </div> 
    
        <div> 
         <label for="year">Bitte Jahrgang eingeben!</label><br> 
         <input id="year" name="year" type="text" value="${obj.year}" /> 
         <span id="yearDetails">bla bla ..</span> 
        </div> 
    
        <div> 
         <label for="description">Description</label><br> 
         <textarea name='description' id='description'>${obj.description}</textarea> 
         <span id="descriptionDetails">bla bla ..</span> 
        </div> 
    
        <div> 
         <label for="priceSelling">Price</label><br> 
         <input id="priceSelling" name="priceSelling" type="text" value="${obj.priceSelling}" /> 
         <span id="priceSellingDetails">bla bla ..</span> 
        </div> 
    
        <input id="send" type="submit" value="Change" name = "button"/>      
        <input id="send" type="submit" value="Cancel" name = "button"/> 
    </form> 
    

  • 4. ObjectChangeServlet никогда не вызывается - вместо того, чтобы выход Mark # 1 из ObjectResolverServlet и в новой строке null печатается. Я нашел, что из 'ObjectResolverServlet' вызывается метод doPost. Угадай, я сделал пропущенную ошибку.

    часть моего web.xml здесь:

    .... 
        <servlet> 
        <servlet-name>ObjectChangeServlet</servlet-name> 
        <servlet-class>impl.servlets.ObjectChangeServlet</servlet-class> 
        </servlet> 
        <servlet-mapping> 
        <servlet-name>ObjectChangeServlet</servlet-name> 
        <url-pattern>/ObjectChangeServlet</url-pattern> 
        </servlet-mapping> 
    
        <servlet> 
        <servlet-name>ObjectChangePage</servlet-name> 
        <jsp-file>/Object/object_change_values.jsp</jsp-file> 
        </servlet> 
        <servlet-mapping> 
        <servlet-name>ObjectChangePage</servlet-name> 
        <url-pattern>/ObjectChangePage</url-pattern> 
        </servlet-mapping> 
    
        <servlet> 
        <description>Gets the object by id</description> 
        <servlet-name>ObjectResolverServlet</servlet-name> 
        <servlet-class>impl.servlets.ObjectResolverServlet</servlet-class> 
        </servlet> 
        <servlet-mapping> 
        <servlet-name>ObjectResolverServlet</servlet-name> 
        <url-pattern>/ObjectResolverServlet/*</url-pattern> 
        </servlet-mapping> 
        .... 
    

  • +0

    Является ли JSP рендерингом, что вы думаете? Когда вы смотрите запрос в Firebug/etc. к чему относится URL-адрес? Вам просто нужно сделать абсолютный атрибут 'action'. –

    +0

    @Dave Newton Когда я проверяю элемент формы, я могу видеть правильное действие, обозначенное '

    ' Он швы, что предыдущий запрос выполняется дважды. :( –

    +0

    Тогда что-то еще не так - проверьте сам запрос POST. Мы не можем видеть остальную часть вашего кода/config, мы не можем проверить, что было развернуто, это то, что вы думаете, мы не можем видеть сервлет, вы думаете, что вы должны быть POSTING. –

    ответ

    1

    нашла решение благодаря хорошей подсказке в вышеуказанных комментариях. Это просто, что действие в <form .. > тега должно указывать на обработке сервлет в абсолютном порядке, так что моя первая попытка в 3. была абсолютной неправильно

    неправильно <form id="object_change_values_form" action="ObjectChangeServlet" method="post" >

    но решение правильно является
    <form id="object_change_values_form" action="/MyProjekt/ObjectChangeServlet" method="post" >

    Смежные вопросы