0

以下は、 Beanクラスのオブジェクトでメソッドを呼び出して名前を設定し、jspページに転送するサーブレットクラスです。

package BeanTesters;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

 public class Controller extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
    Bean bean = new Bean(); 
    bean.setName("Suhail Gupta");
    //request.setAttribute("name", bean);
    RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
  }
}

そしてこれは豆のクラスです:

package BeanTesters;

 public class Bean {

  private String name = null;

  public void setName(String n) {
    name = n;
  }

  public String getName() {
    return name;        
  }
 }

以下は、サーブレットによって設定された名前を表示しようとするjspスニペットです。

<jsp:useBean id="namebean" class="BeanTesters.Bean" scope="request" />
    Person created by the Servlet : <jsp:getProperty name="namebean" property="name" />

私が得る結果は次のとおりです:サーブレットによって作成された人:nullなぜnull値を取得するのですか?

4

1 に答える 1

1

jsp:useBeanタグはリクエストの属性でBeanを取得しようとし、"namebean"この属性名で何も保存しなかったため、Beanを作成します。したがって、JSPで使用されるBeanインスタンスは、サーブレットで作成されたものとは異なるインスタンスです。

次のコードをサーブレットに配置すると、目的の動作が得られます。

request.setAttribute("namebean", bean);

jsp:xxxタグは完全に廃止されているため、使用しないでください。代わりに、JSP式言語(EL)とJSTLを使用する必要があります。

Person created by the Servlet : ${namebean.name}

またはさらに良いことに、名前に存在する可能性のあるHTML文字が適切にエスケープされていることを確認します。

Person created by the Servlet : <c:out value="${namebean.name}"/>
于 2012-03-13T08:08:47.470 に答える