のJSPアクションタグがどのくらい正確に理解していますか。私の理解では、scope
は、Beanの場所(リクエスト、セッション、アプリケーションなど)を示すために使用されていますが、いくつかのテストの後、私は興味深い状況に遭遇しました。次のJSPコードを考慮してください(私はscripletsここだけ)簡単のために:jsp:useBeanスコープ属性はどのように機能しますか?
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="package2JSP.User" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Title</title>
</head>
<body>
<%
User user1 = new User("id1","name1");
User user2 = new User("id2","name2");
request.setAttribute("user", user1);
session.setAttribute("user", user2);
%>
<%-- Here I expect to create user bean that represents user2 from session scope--%>
<jsp:useBean id="user" class="package2JSP.User" scope="session"/>
<%-- Here I expect user name to be name2 but it is name1 instead--%>
<jsp:getProperty property="name" name="user"/>
</body>
</html>
だから、基本的に、ここで私は2つのユーザーオブジェクトを作成し、私は「セッション」から「ユーザー」を取得しようとしたときに、「ユーザー」は、要求とセッションスコープの属性として、それらを設定しますスコープはjsp:useBean
を使用しているように、「要求」スコープの「ユーザー」が検索されたようです。
なぜ起こったのか教えていただけますか?そして、jsp:useBean
を通常通り指定されたスコープから属性を選択するのではなく、このように動作させる開発の理由は何ですか?
ここで、JSTL/ELを使用して必要な値、すなわち<c:out value="${sessionScope.user.name}" />
を取得することができますが、私はちょうどjsp:useBean
の仕組みを知りたいと思っています。
- のjsp:useBeanの
- のjsp:getPropertyメソッド
のjsp:useBeanの
よるSpecification - CHAPTER JSP.5 - JSP.5.1 <jsp:useBean>
へ:
ありがとうございます。これは、 'jsp:getProperty'が' findAttribute'を使って値を取得すると、論理的に ' 'のために" name1 "を取得する必要があります。セッションスコープ –
私はこれをしようとしたときに私はおそらく 'getProperty'を使うときには' jsp:useBean'でBeanを定義しなければならないという例外があります。あなたが示唆したように '<%= user.getName()%>'を使って正しい値を取得しようとしましたが、うまくいきましたので、ここではjsp:getProperty'は 'jsp:useBean'ではありません。 –