0

実装するサーブレットに「id」値を任意に割り当てると、機能します。ただし、抽象クラスから id 値を正しく継承しない場合は、「if」ステートメントをスキップして、「then」ステートメントで提供された URL に転送します。何を与える?「id」変数の何が問題なのかを知ることができます:

抽象サーブレット スニペット:

 protected Integer id = null;

 private void _doProcess(final HttpServletRequest request, final HttpServletResponse response)
        throws IOException, ServletException {
    try {
        response.setContentType("text/html");
        writer = response.getWriter();
        final String idString = request.getParameter("id");
        if(StringUtil.isNotEmptyStringTrimmed(idString)){
            try {
                id = Integer.parseInt(idString.trim());
            } catch (NumberFormatException e) {
                id = null;
            }
        }

        doProcess(request,response);

    } finally {
        id = null;
    }

    try {
        writer.close();
    } catch (Exception e) {
        // no-op
    }
}

サーブレット スニペットの実装:

 public void doProcess(final HttpServletRequest request, final HttpServletResponse response)
        throws IOException, ServletException {

    // set page title
    final HttpSession session = request.getSession();
    session.setAttribute("pageTitle", "Training Project 5: Author");

    if (id == null){
        request.setAttribute("authorNamesList", printAuthorNames());
        request.getRequestDispatcher("authorList.jsp").include(request,response);
    }else{
        final Author author = BEAN_FACTORY.getMember(id);
        session.setAttribute("authorId",author.getId());
        session.setAttribute("name", author.getName());
        session.setAttribute("bio", author.getBio());
        session.setAttribute("picture",author.getPicture());
        session.setAttribute("bookTitles", printBookTitles(author.getId()));
        request.getRequestDispatcher("authorPage.jsp").include(request,response);
    }
}

以下の jsp コードは、上記のサーブレットの「else」コードが条件文にない場合に機能します。

 <div id="right">
   <table class="display" summary="Author Information">         
     <tr>
         <td><span class="brown">Author Id: <c:out value="${authorId}"/></span></td>
     </tr>
     <tr>
         <td><span class="brown">Name: <c:out value="${name}"/></span></td>
     </tr>
     <tr>
         <td><span class="brown">Bio: <c:out value="${bio}"/></span></td>
     </tr>
     <tr>
         <td>
             <p>
                 <span class="brown"><img src="<c:out value="${picture}"/>" alt= ""/></span>
             </p>
         </td>
     </tr>
4

3 に答える 3

3

クラスフィールドでない限りid、すべてのコードを表示しているわけではありません。また、「機能しない」とはどういう意味かは不明です。期待されるコンテンツは空ですか?例外が発生しますか?

于 2012-11-22T03:11:29.083 に答える
1

'Id'は、初期化されていない場合ではなく、常にnullまたは未定義になります。

于 2012-11-22T03:14:02.143 に答える
0

問題が何であるかを理解しました。. . 申し訳ありませんが、問題を解決するのに十分な情報を全員に提供しませんでした。全員が選択したリストを出力する authorList.jsp ページがあります (以下を参照)。ユーザーが authorList.jsp ページで情報を表示する著者を選択すると、著者 ID パラメータがサーブレットに戻され、サーブレットがユーザーを authorPage.jsp に転送します。サーブレットは個々の著者情報を表示します。

基本的に、web.xml のサーブレット マッピング指定 (listAuthor) ではなく、次の jsp ページ (authorPage.jsp) の正確な .jsp 名を使用しました。私が持っていた:

    <table summary="Author List">
        <c:forEach items="${authorNamesList}" var="name">
            <tr>
               <td><span class="brown"><a href="authorPage.jsp?id=${name.key}">${name.value}</a></span></td>
            </tr>
        </c:forEach>

になるはずだった:

    <table summary="Author List">
        <c:forEach items="${authorNamesList}" var="name">
            <tr>
               <td><span class="brown"><a href="listAuthor?id=${name.key}">${name.value}</a></span></td>
            </tr>
        </c:forEach>
    </table>

場合によっては、いったん離れて後で戻ってきて、新鮮に見るほうがよい場合もあります。皆さん、ハッピーサンクスギビング:)

于 2012-11-22T19:16:06.497 に答える