質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Q&A

0回答

1546閲覧

jspからformクラス内の明細List内の明細Listをゲット・セットしたい

Tsukumo99

総合スコア4

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

0グッド

0クリップ

投稿2020/01/28 02:38

編集2020/01/28 10:25

前提・実現したいこと

JavaでSeesaaを使ってWebページの開発をしており
入力画面で明細の明細を作る必要があり色々と試して見たのですが、
外側の明細は取れるのですがその中の明細が取れません。

外側の明細は完璧に想定通りの動きをするので、同じようにその中に明細Listを作ったのですが、そもそもの記述方法が間違っているのでしょうか?

該当のソースコード

java

1public class MainForm { 2 3 public String testNo; 4 5 public List<SubForm> subList; 6 7 public void initializeForm(){ //actionクラスで入力画面遷移前に呼び出す 8 testNo=""; 9 initializeSub(); 10 } 11 12 public void initializeSub(){ 13 subList = new ArrayList<SubForm>(1); 14 SubForm sub = new SubForm(); 15 sub.detail=""; 16 sub.initializeSubSub(); 17 subList.add(sub); 18 } 19 20 public String getTestNo() { 21 return testNo; 22 } 23 24 public void setTestNo(String testNo) { 25 this.testNo = testNo; 26 } 27 28 public List<SubForm> getSubList() { 29 return subList; 30 } 31 32 public void setSubList(List<SubForm> subList) { 33 this.subList = subList; 34 } 35}

java

1public class SubForm{ 2 public String detail; 3 public List<SubSubForm> subSubList; 4 5 public void initializeSubSub(){ 6 subSubList = new ArrayList<SubSubForm>(1); 7 SubSubForm subSub = new SubSubForm(); 8 subSub.subDetail=""; 9 subSubList.add(subSub); 10 } 11 12 public String getDetail() { 13 return detail; 14 } 15 16 public void setDetail(String detail) { 17 this.detail = detail; 18 } 19 20 public List<SubSubForm> getSubSubList() { 21 return subSubList; 22 } 23 24 public void setSubSubList(List<SubSubForm> subSubList) { 25 this.subSubList = subSubList; 26 } 27}

java

1public class SubSubForm{ 2 public String subDetail; 3 4 public String getSubDetail() { 5 return subDetail; 6 } 7 8 public void setSubDetail(String subDetail) { 9 this.subDetail = subDetail; 10 } 11}

jsp

1<table> 2 <tr> 3 <td> 4 <html:text property="testNo" maxlength="5" size="5"/> 5 </td> 6 </tr> 7</table> 8<table> 9 <c:forEach var="subList" varStatus="i" items="${subList}"> 10 <tr> 11 <td> 12 <html:text property="subList[${i.index}].detail" maxlength="5" size="5"/> 13 </td> 14 </tr> 15 <tr> 16 <td> 17 <table> 18 <c:forEach var="subSubList" varStatus="j" items="${subList.subSubList}"> 19 <tr> 20 <td> 21 <html:text property="subList[${i.index}].subSubList[j.index].subDetail" maxlength="5" size="5"/> 22 </td> 23 </tr> 24 </c:forEach> 25 </table> 26 </td> 27 </tr> 28 </c:forEach> 29</table>

また上記のコードでは両明細とも1行ずつですが、実際には明細行はJavaScriptで増減するのでListで値を保持しようとしています。

エラーメッセージ

上記のコードで入力画面を開こうとすると下記のエラーが出ます。
javax.servlet.jsp.JspException: Bean org.apache.struts.taglib.html.BEAN の プロパティsubList[0].subSubList[0].subDetail に対する参照は不正なアクセスです

試したこと

jsp

1<html:text property="subDetail" name="subList"/>

name属性にforEachの変数を指定してみるとエラーなく入力画面は開きbeanから値は取得できているようですがその状態で入力してもbeanに値はセットされませんでした。

他にもSubSubFormをSubFormのインナークラスにしてみたりforEachやhtml:textを色々なパターンでセットしたりしたのですがうまく行かず手詰まりです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetutetu

2020/01/28 03:59

SubSubFormクラスが見当たりませんが(恐らく3つ目のクラスが本来そうなのだと思いますが) 実際にこの内容で動作を確認しているのであればそれが原因では。
Tsukumo99

2020/01/28 06:38

すみません質問用に書いたコードなのでクラス名を書き間違えていました。本文修正しました。
tetutetu

2020/01/28 07:14

これ以上原因推測するには情報が足りないので、気になった点。 ・SubForm内のsubSubListに対するgetter/setterの名前がおかしい点 ・そもそもgetter/setter定義しているのにメンバ変数をpublicにして直接値を設定してる点  →別に設定はできますがお作法としてって話 Springしか触ってないのでフレームワークに関連する何かだったら申し訳ないですが。
退会済みユーザー

退会済みユーザー

2020/01/28 11:16 編集

Seasar2ならeol、無印はない。 セキュリティ的にどうなのと思うがどのプロダクトさ
退会済みユーザー

退会済みユーザー

2020/01/28 11:11 編集

ミスのため削除
Tsukumo99

2020/01/28 23:43

Seasar2です。 新規開発と言うわけではなくローカルネットワーク向けの古いプロダクトへの機能追加なので...
退会済みユーザー

退会済みユーザー

2020/01/28 23:46

で、どのプロダクトさ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問