0

Tomcat7とアプリに問題があります。

Beanを作成し、プロパティを設定します。Beanを再作成せずに、別のjsp(get)で同じプロパティを使用します。スコープが「session」のBeanを宣言しましたが、プロパティを取得しようとするとnullになります。なぜ?何が間違っているのですか?

私のウェブアプリには次のものがあります。

test1.jsp

call test2.jsp and pass the parameter "name"="mm"

test2.jsp

<jsp:useBean id="sBean" scope="session" class="my.package.SessionBean" />
<jsp:setProperty name="sBean" property="*" />

プロパティ「name」の値は、正確には「mm」です。

test3.jsp

<jsp:useBean id="sBean" scope="session" class="my.package.SessionBean" />
<% sBean.getName() %>

プロパティ「name」の値が「mm」ではなくNULLです

public Sessionbean implements Serializable
{
  private String name;
  public SessionBean(){}
  //get and set of name
}

tomcat6の同じことは完全に機能します

4

2 に答える 2

0

これがtomcat7ではなくtomcat6で機能する理由はわかりませんが、test3.jspで変更すると次のようになります。

<% sBean.getName() %> 

に:

<% SessionBean testBean = (SessionBean) session.getAttribute("sBean"); //try changing name of SessionBean too so it doesn't conflict with the useBean name
   testBean.getName();
%>

動作するはずです。または、次を使用することもできます。

<jsp:getProperty name="sBean" property="name" />

更新 2つのJSPページをまとめました。私はそれをtomcat7ですばやくテストしましたが、うまくいきました。フォームは作成しませんでしたが、これが一般的な考え方だと思います。それは大まかにあなたがそれをセットアップする方法ですか?

test1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ page import="my.project.SessionBean" %>
<jsp:useBean id="sBean" scope="session" class="my.project.SessionBean" />


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
SessionBean testBean = (SessionBean) session.getAttribute("sBean");
testBean.setName("Nate");
pageContext.forward("test2.jsp"); //forward to test2.jsp after setting name

%>
<jsp:getProperty name="sBean" property="name" />

</body>
</html>

test2.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

<jsp:useBean id="sBean" scope="session" class="my.project.SessionBean" />
<%@ page import="my.project.SessionBean" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>page 2</p>
<p>from jsp tag</p>
<jsp:getProperty name="sBean" property="name" /><br />

<p> from scriptlet</p>
<%
SessionBean testBean = (SessionBean) session.getAttribute("sBean");
out.print(testBean.getName());
%>

</body>
</html>
于 2012-08-28T14:59:34.997 に答える
0

元のページはほぼ良いと思います。
test3.jspのスクリプトレットに等号(=)がありません。<%= sBeangetname()%>である必要があります。
これは、()IS / GET)フィールド名(または疑似フィールド名)のパブリックメソッド名である必要があります。「(SessionBean)session.getAttribute( "sBean")」を含む回答は機能します。ただし、JSPに含まれているBeanメカニズムは使用しません。したがって、それは間違っています。

于 2013-04-03T19:43:55.493 に答える