- PR -

jsp、servlet、beanの連携

1
投稿者投稿内容
タマダ
会議室デビュー日: 2005/11/22
投稿数: 5
投稿日時: 2005-11-22 00:19
servletからbeanを呼び出して値を格納し、jspからその値を参照するプログラムを作っているのですが、jspからの参照がうまくいきません。

<TestControl.java>

package chap1;

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

import chap1.*;

public class TestControl extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
try {
ServletContext ctx = this.getServletContext();
TestBean tb = new TestBean();
tb.setTable("aiueo");
String strMessage = tb.BeanSearch();
request.setAttribute("strMessage",strMessage);
request.setAttribute("TestBean",tb);
RequestDispatcher rd = ctx.getRequestDispatcher("/chap1/jndi/TestShow.jsp");
rd.forward(request, response);
} catch (Exception e) {
throw new ServletException(e);
}
}
}


<TestBean.java>

package chap1;

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

public class TestBean implements Serializable {
private String table = "abc";
private String result= "def";
public void setTable(String table) {this.table = table;}
public void setResult(String result) {this.result = result;}
public String getTable(){return table;}
public String getResult(){return result;}

public void TestBean() {}

public String BeanSearch () {
TestBean tb = new TestBean();
String strTable = getTable();
setResult(strTable);
return table;
}
}


<TestShow.jsp>

<html>
<head>
<title>test</title>
</head>

<jsp:useBean id="tb" class="chap1.TestBean" scope="request" />

strMessage = <c:out value="${requestScope.strMessage}"/><br>

table = <jsp:getProperty name="tb" property="table" /><br>
result = <jsp:getProperty name="tb" property="result" /><br>

</body>
</html>



結果は、
strMessage = aiueo
table = abc
result = def
と表示されてしまいます。

beanに格納されたデータをjspから参照するには、どうしたらいいのでしょうか・・・
よろしくお願いいたします。
さぷり
会議室デビュー日: 2005/11/18
投稿数: 18
投稿日時: 2005-11-22 10:34
こんにちわ。

request.setAttribute("TestBean",tb);
の部分を
request.setAttribute("tb",tb);
にしてみたらどうでしょう。

<jsp:useBean id="tb" class="chap1.TestBean" scope="request" />
で宣言しても、リクエストスコープ中にBeanが見つからずに新規に
インスタンス化されたため、期待していたものとは違う値が
表示されたのでしょう。
タマダ
会議室デビュー日: 2005/11/22
投稿数: 5
投稿日時: 2005-11-22 23:15
さぷりさん、ありがとうございます。

>request.setAttribute("tb",tb);
>にしてみたらどうでしょう。

この通りに書き直しましたら、狙い通りの値を出すことができました。

setAttribute命令に対しての私の勉強不足でした。
もう一度基礎から勉強しようと思います。
見直してみると、beanのコードも何がしたいんだかよくわからないですし・・・お恥ずかしい限りです。
1

スキルアップ/キャリアアップ(JOB@IT)