- PR -

JSPの配列項目のセッターが動かない

1
投稿者投稿内容
スイマー
会議室デビュー日: 2005/04/15
投稿数: 18
お住まい・勤務地: 大阪
投稿日時: 2005-06-03 10:39
Struts1.2を使用しています。
このActionFormのゲッターで、次のエラーとなります。
java.lang.NullPointerException

コード内容は
public class M37A041F extends ActionForm {
private String[] modStaYt_DY = null;
public String[] getModStaYt_DY() {
return modStaYt_DY;
}
public void setModStaYt_DY(String[] modStaYt_DY) {
this.modStaYt_DY = modStaYt_DY;
}

次のようにJSPを定義しています。
<logic:iterate id="mode" name="modes" type="bean.Mode">
<html:text size="4" property="modStaYt_DY" value="<%= mode.getModStaYt_DY()%>" />
</logic:iterate>

Eclipseのデバックでトレースしてみると、セッターが動いていません、
Jspの定義に何か追加する必要があるのでしょうか?
参考書を見ても分かりませんでした、教えてください。

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-06-03 11:00
getModStaYt_DY で NullPointerException が発生することは考えにくいですね。modStaYt_DY が null なら null を返すだけですから。それとも NPE が発生しているのは getter を呼び出した側?
スタックトレースをみてどこで発生しているのかもう一度確認してみましょう。

ActionForm の使い方がわからないのであれば Struts のサンプルを参考にしましょう。
スイマー
会議室デビュー日: 2005/04/15
投稿数: 18
お住まい・勤務地: 大阪
投稿日時: 2005-06-03 11:33
NPEが発生しているのは、Actionの次の部分です。
この時、変数:modStaYt_DYを見てみると、JSPよりデータが入力されている
のにもかかわらず、NULLとなっていました。

for(int i=0; i<modStaYt_DY.length; i++){

問題は、配列のセッターが思い通りに動かない、その結果、
modStaYt_DY.lengthにおいて、配列の個数が取得できなくてNPEになるのだと思いますが。
さらなる、指摘お待ちしております。

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-06-03 12:37
引用:

さらなる、指摘お待ちしております。



想像で回答してくれって事ですか?
struts-configの関連する部分や、一連のソースを
提示するくらいのことはしましょうよ。
スイマー
会議室デビュー日: 2005/04/15
投稿数: 18
お住まい・勤務地: 大阪
投稿日時: 2005-06-03 13:19
はい、失礼しました。struts-configは
コード:
		<form-bean 
			name="M37A041F"
			type="acform.M37A041F">
		</form-bean>

		<action 
			path="/M37A041"
			name="M37A041F"
			type="action.M37A041A"
			input="/view/M37A041000.jsp"
			scope="session">
			<forward name="登 録"   path="/view/M37F021.jsp"/>
			<forward name="戻 る"   path="/view/M37F021.jsp"/>
			<forward name="メニュー" path="/view/M37F021.jsp"/>
			<forward name="終 了"   path="/view/M37F011.jsp"/>
		</action>



Actionは
コード:
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ActionForward af = null;
		M37A041F m37a041f = (M37A041F) form;
		String modStaYt_DY[] = m37a041f.getModStaYt_DY();
				
		List modes = new ArrayList();
		
		for(int i=0; i<modStaYt_DY.length; i++){
			mode.setModStaYt_DY(modStaYt_DY[i]);
			modes.add(mode);
		}
                dao.ModeController ctrl = dao.ModeController.getInstance(); 
                ctrl.updateModes(modes);
                af = mapping.findForward(page);
                return af;
	}
}


です、まだ、不足するところがあれば、言ってください。
よろしくお願いします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-06-04 19:23
リクエストのパラメータの名前・値と、
アクションフォームのプロパティとの関係に
不整合等の問題があるのではないでしょうかね。

初期時にnullだと困ると言う場合、
ActionFormのコンストラクタやフィールド宣言で
空の配列を作ってやると言う方法もありますね。

private String[] modStaYt_DY = null;

private String[] modStaYt_DY = new String[0];
スイマー
会議室デビュー日: 2005/04/15
投稿数: 18
お住まい・勤務地: 大阪
投稿日時: 2005-06-07 14:00
かつのり様ありがとうございました。

初期化について、理解できました。

引用:
リクエストのパラメータの名前・値と、
アクションフォームのプロパティとの関係に
不整合等の問題があるのではないでしょうかね。


その後、JSPのデータについて、ActionFormの配列にてセット・ゲットするだけの
シンプルな命令のみにして実行してみたところ、動作することが確認出来ました。
どうも、ここで載せた命令以外の個所に、ご指摘のとおり、何かの悪さがあるようです。
そのバグはまだ不明ですが地道にトレースしていこうと思っています。

従って、このスレッドの質問は解決できました。
どうも、余計なバグが他にあったようです、たいへん失礼しました。、。
もし、また、迷路に入り込んだら、その点に絞って質問させて貰います。
ありがとうございました。
1

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