2012-05-13 34 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は、バックグラウンドからオブジェクトを再度取得し、それを属性として要求に入れます。 MyObjectChangePage

    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) ; 
    } 
    

    ユーザが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呼び出されることはありません - 代わりにObjectResolverServletから、新たなラインnullで出力マーク#1が印刷されます。 「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の要求を見るとき。 POSTされるURLは何ですか?フォームの 'action'属性を絶対的にするだけでよいでしょう。 –

    +0

    @Dave Newtonフォーム要素をチェックすると、正しいアクションが表記されています。 '

    '以前のリクエストが2回行われたことを縫い目にします。 : –

    +0

    他の何かが間違っています - POSTリクエスト自体をチェックしてください。残りのコード/設定を見ることはできません。展開されているものがあなたの考えであることを確認することはできません。サーブレットあなたはあなたがあなたと思っていると思っていると思っています。 –

    答えて

    1

    ソリューションに上記のコメントでは良い手がかりに感謝を発見しました。 3.の私の最初の試みが間違っ

    間違っ <form id="object_change_values_form" action="ObjectChangeServlet" method="post" >

    しかし正しいソリューションは
    絶対だったので、それは、<form .. >タグ内のアクションが絶対的に処理サーブレットを指していなければならないことを単にです<form id="object_change_values_form" action="/MyProjekt/ObjectChangeServlet" method="post" >

    関連する問題