- PR -

Strutsアプリ実行時の空白ページに関して

1
投稿者投稿内容
bird
会議室デビュー日: 2004/04/05
投稿数: 15
投稿日時: 2004-05-13 19:30
お世話になっております。
Strutsアプリケーション実行時のエラーに関して質問させて下さい。

Sturtsを用いて作成したアプリケーションが幾つかあるのですが、
何れのwebアプリも思うように動作しません。

具体的には、Actionクラスを実行した後、forward name="success"で
定義されている転送先ページへ画面が遷移するはずですが、
何故か遷移先が空白ページになってしまいます。
Tomcatのほうにはエラーも何も吐かれず、デバッグのしようがありません。
このような場合、どこに原因があるのでしょうか?

ちなみにテストアプリケーションは、

ActionForm :: testForm
Action :: testAction
topのJSP :: test_form.jsp
遷移後のJSP :: test_action.jsp

の4構成で、
top.jsp → testAction.do → test_action.jsp
のように画面遷移します。内容は、top.jspでnameというパラメータを
入力し、その内容をtest_action.jspで表示するという簡単なものです。

struts-config.xmlは、Actionの定義に関しては、

<action
path="/testAction"
type="action.TestAction"
name="testForm"
scope="request"
validate="false" >
<forward name="success" path="/jsp/test_action.jsp" />
</action>

ActionFormの定義は、
<form-bean name="testForm" type="form.TestForm"/>

です。
アドバイスよろしくお願いいたします。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-05-13 20:00
Actionがあやしいと思います。

あと、真っ白なページが表示されるとのことですが、ブラウザからそのソースを表示させてみてみるとなんか見覚えがありますか? それとも単なる<html><body></body></html>みたいなかんじでしょうか?

bird
会議室デビュー日: 2004/04/05
投稿数: 15
投稿日時: 2004-05-13 20:09
返答ありがとうございます!
Actionクラスの中身が怪しいという事ですか?

Actionクラスは、

ここから--

public class TestAction extends Action {

public ActionForward excute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {

TestForm testForm = (TestForm) form;
String name = testForm.getName();
String email = testForm.getMailAddress();

name += ">>success";
email += ">>success";

testForm.setName(name);
testForm.setMailAddress(email);

request.setAttribute("testForm", testForm);

return mapping.findForward("success");
}
}


--ここまで

ちなみに、空白ページのソースは以下のようになってます。

ここから--

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=shift_jis"></HEAD>
<BODY></BODY></HTML>

--ここまで

[ メッセージ編集済み 編集者: bird 編集日時 2004-05-13 20:14 ]
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-05-13 21:44
ActionFormをそのまま返しているのは初めて見ました。
普通はBeanで返すか、そのまま
request.setAttribute("name", name);
ってかんじなんですが。

#うーん、ActionFormってそのまんま返してもいいんですかねえ。普通のbeanとして見れば別に問題ないのかもしれませんが、私にはよく分かりません。

それはさておき、WEB-INF/jsp/test_action.jsp の方のソースもよければ見せていただけませんか。

空白ページが表示される場合は、Action にて return null; されたか、jspにてtaglibとかがエラーになったのではないかと思いますが、tomcatのログにエラーが残ってないというのでしたら、後は全然違うjsp呼んでたとか、修正したプログラムをデプロイしてないとか (^^)

bird
会議室デビュー日: 2004/04/05
投稿数: 15
投稿日時: 2004-05-14 06:43
ActionFormをそのままsetAttributeする必要はないと認識している
のですが、どちらの場合も動きません。

>それはさておき、WEB-INF/jsp/test_action.jsp の方のソースもよければ見せていただけませんか。

JSPのソースは以下の通りです。

test_form.jsp
ここから--
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html:html>
<head>
<title>Test Struts</title>
</head>
<body bgcolor="#FFFFFF">

<html:form action="/testAction">

<html:text name="testForm" property="name" />
<html:text name="testForm" property="mailAddress" />

<html:submit property="submit" value="submit" />

</html:form>
</body>
</html:html>
--ここまで

test_action.jsp
--ここから
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<html:html>
<head>
<title>Test Struts</title>
</head>
<body bgcolor="#FFFFFF">

<bean:write name="testForm" property="name" />
<bean:write name="testForm" property="mailAddress" />

</body>
</html:html>
--ここまで

です。


>空白ページが表示される場合は、Action にて return null; されたか、jspにてtaglibとかがエラーになったのではないかと思いますが、tomcatのログにエラーが残ってないというのでしたら、後は全然違うjsp呼んでたとか、修正したプログラムをデプロイしてないとか (^^)

違うjspを呼んでいる可能性と、デプロイしてない可能性はありません。
他のコンテンツではきちんとjspへフォーワードできていますし、デプロイも
しています。
あとはActionがreturn nullを返しているという点ですかね・・・
そこらへんの確認はどうすればいいですか?
わんこ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 46
投稿日時: 2004-05-14 09:41
引用:
>空白ページが表示される場合は、Action にて return null; されたか、jspにてtaglibとかがエラーになったのではないかと思いますが、tomcatのログにエラーが残ってないというのでしたら、後は全然違うjsp呼んでたとか、修正したプログラムをデプロイしてないとか (^^)

違うjspを呼んでいる可能性と、デプロイしてない可能性はありません。
他のコンテンツではきちんとjspへフォーワードできていますし、デプロイも
しています。
あとはActionがreturn nullを返しているという点ですかね・・・



私だったら、フォワードする直前でログに出してみるか、
Actionクラスなんかを拡張したクラスがあればそこで取得をしてみます(笑

確かに空白ページになる場合は、
strutsタグが間違っていたり、return nullしている場合だと思います。
returnしたのがstruts-config.xmlに定義されていないかスペルミス
とかも私の場合はよくありました。



[ メッセージ編集済み 編集者: わんこ 編集日時 2004-05-14 09:42 ]
gsg
常連さん
会議室デビュー日: 2002/08/09
投稿数: 20
お住まい・勤務地: 東京都
投稿日時: 2004-05-14 10:04
Actionクラスに書いているメソッド名が「excute」だからでは
ありませんか?多分、ちゃんと「execute」メソッドをオーバーライドしないと、
Actionクラスがデフォルトで持っている「execute」メソッドを実行してしまうので、
正しいJSPを表示してくれないはずです。
(類似品として、「execute」メソッドの引数を間違えて書いている場合もあります。
私は引数ミスではまったことがありました。)
bird
会議室デビュー日: 2004/04/05
投稿数: 15
投稿日時: 2004-05-14 11:13
すみません、解決しました。

Actionクラスのexecuteがexcuteとなっている
ミスでした・・・
こんな単純なミスで悩むなんて・・

皆さんありがとうございました!
以後、スペルミスは気をつけます。
1

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