前提・実現したいこと
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を色々なパターンでセットしたりしたのですがうまく行かず手詰まりです。
あなたの回答
tips
プレビュー