- PR -

Strutsを使用してjspから入力された値が取得できません。

投稿者投稿内容
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-07-20 10:08
いつもお世話になっております。
現在、Strutsを使用して開発を行っております。
そこでjspからActionに遷移する事は、できましたが、
コンボボックスの内容が取得できません。
どなたかご教授お願い致します。

【環境】
eclipse3.0.1
tomcat5.0
j2sdk1.4.2_04
struts1.2.7
【ソース】
-jsp側のソース-------------------------------------------

<html:form action="/Report" >
<table cellSpacing="0" cellPadding="0" width="100%" border="1" align="left">
<tr>
<td>
<logic:iterate id="ele" name="nippouMainForm" property="mailworkfbList" type="jp.XXXXXXXXXXXXXXX.sessionbean.Mailwork_fb">
<html:select name="ele" property="startTimeId" indexed="true">
<html:optionsCollection name="ele" property="startTimeList" value="value" label="label"/>
</html:select> -
<html:select name="ele" property="endTimeId" indexed="true">
<html:optionsCollection name="ele" property="endTimeList" value="value" label="label" />
</html:select>
<html:textarea name="ele" property="work_contents" rows="1" cols="50" indexed="true" /><br>
</logic:iterate>
</td>
</tr>

<tr>
<td></td>
<td align="right">
<html:submit property="button1" value="送信" />
</td>
</tr>
</table>
</html:form>

-取得するformbean-------------------------------------------

public class NippouMainForm extends ActionForm {

private Employee employee;
private Group group;
private List dateList_ym;
private List dateList_dd;

private int reportDate_ym;
private int reportDate_dd;

private int fromEmployeeid;
private int toEmployeeid;
private Date acceptDate;
private Date sendDate;
private int calenderid;
private String mailheader;
private List returnmail;
private boolean IsReturnMail;

private List mailworkfbList;


public Date getAcceptDate() {
return acceptDate;
}
public void setAcceptDate(Date acceptDate) {
this.acceptDate = acceptDate;
}
public int getCalenderid() {
return calenderid;
}
public void setCalenderid(int calenderid) {
this.calenderid = calenderid;
}
public List getDateList_dd() {
return dateList_dd;
}
public void setDateList_dd(List dateList_dd) {
this.dateList_dd = dateList_dd;
}
public List getDateList_ym() {
return dateList_ym;
}
public void setDateList_ym(List dateList_ym) {
this.dateList_ym = dateList_ym;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public int getFromEmployeeid() {
return fromEmployeeid;
}
public void setFromEmployeeid(int fromEmployeeid) {
this.fromEmployeeid = fromEmployeeid;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public boolean isReturnMail() {
return IsReturnMail;
}
public void setReturnMail(boolean isReturnMail) {
IsReturnMail = isReturnMail;
}
public String getMailheader() {
return mailheader;
}
public void setMailheader(String mailheader) {
this.mailheader = mailheader;
}
public List getMailworkfbList() {
return mailworkfbList;
}
public void setMailworkfbList(List mailworkfbList) {
this.mailworkfbList = mailworkfbList;
}
public int getReportDate_dd() {
return reportDate_dd;
}
public void setReportDate_dd(int reportDate_dd) {
this.reportDate_dd = reportDate_dd;
}
public int getReportDate_ym() {
return reportDate_ym;
}
public void setReportDate_ym(int reportDate_ym) {
this.reportDate_ym = reportDate_ym;
}
public List getReturnmail() {
return returnmail;
}
public void setReturnmail(List returnmail) {
this.returnmail = returnmail;
}
public Date getSendDate() {
return sendDate;
}
public void setSendDate(Date sendDate) {
this.sendDate = sendDate;
}
public int getToEmployeeid() {
return toEmployeeid;
}
public void setToEmployeeid(int toEmployeeid) {
this.toEmployeeid = toEmployeeid;
}

// 時間毎作業内容詳細のListを取得、喪失
public Mailwork_fb setMailworkfbList(int i){
Mailwork_fb form;
if(i > mailworkfbList.size() -1){
for(int j = mailworkfbList.size(); j < i + 1; j++){
form = new Mailwork_fb();
mailworkfbList.add(form);
}
}
return (Mailwork_fb)mailworkfbList.get(i);
}

public Mailwork_fb getMailworkfbList(int i){
Mailwork_fb form;
if(i > mailworkfbList.size() -1){
for(int j = mailworkfbList.size(); j < i + 1; j++){
form = new Mailwork_fb();
mailworkfbList.add(form);
}
}
return (Mailwork_fb)mailworkfbList.get(i);
}
public void setG(int i, Mailwork_fb form){
mailworkfbList.set(i, form);
}
public void add(Mailwork_fb g) {
// TODO 自動生成されたメソッド・スタブ

}

}

-mailworkfbListの中身-------------------------------------------

import java.util.List;

public class Mailwork_fb {

private int startTimeId;
private int endTimeId;
private List startTimeList;
private List endTimeList;
private String work_contents;

/** full constructor */
public Mailwork_fb(int startTimeId, int endTimeId, List startTimeList,
List endTimeList, String work_contents) {
super();
this.startTimeId = startTimeId;
this.endTimeId = endTimeId;
this.startTimeList = startTimeList;
this.endTimeList = endTimeList;
this.work_contents = work_contents;
}

public Mailwork_fb() {
}

public int getEndTimeId() {
return endTimeId;
}
public void setEndTimeId(int endTimeId) {
this.endTimeId = endTimeId;
}
public List getEndTimeList() {
return endTimeList;
}
public void setEndTimeList(List endTimeList) {
this.endTimeList = endTimeList;
}
public int getStartTimeId() {
return startTimeId;
}
public void setStartTimeId(int startTimeId) {
this.startTimeId = startTimeId;
}
public List getStartTimeList() {
return startTimeList;
}
public void setStartTimeList(List startTimeList) {
this.startTimeList = startTimeList;
}
public String getWork_contents() {
return work_contents;
}
public void setWork_contents(String work_contents) {
this.work_contents = work_contents;
}
}
------------------------------------------------
jsp画面から「送信」ボタン押下時にコンボボックスの内容を取得したいと
考えています。
beanのmailworkfbListには、【mailworkfbListの中身】のクラスを格納しています。
しかし、実際には値が取得されずに困っています。
説明が下手で理解しづらいと思いますがよろしくお願いします。


[ メッセージ編集済み 編集者: わく 編集日時 2005-07-20 13:44 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-07-20 10:33
Struts のサンプルにずばりコンボボックスの値を取得するサンプルがあるかと思います。
そちらを参考にしてはいかがでしょうか。
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-07-20 10:48
引用:

インギさんの書き込み (2005-07-20 10:33) より:
Struts のサンプルにずばりコンボボックスの値を取得するサンプルがあるかと思います。
そちらを参考にしてはいかがでしょうか。


返信ありがとうございます。

普通のコンボボックスの内容を取得する事は、できますが
今回のように取得したいコンボボックス等の内容が以下のような
感じになっているので取得できません。
説明不足で申し訳ありませんでした。

取得したい項目:mailworkfbListというList
mailworkfbListのListとは、【mailworkfbListの中身】クラスの内容が表示されている
行数分格納されています。その中にコンボボックスの内容やテキストボックスの内容が
あります。

申し送れましたが、Listにデータを入れて送信ボタン押下時、Action側でnullとなります。
Listに別のクラスを格納しないと正常に値を取得できる事は確認済みです。

申し訳ありませんがよろしくお願いします。

[ メッセージ編集済み 編集者: わく 編集日時 2005-07-20 10:58 ]
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-07-20 12:09
んー、やりたいことがいまいち分からないのですが、
リストボックスの内容全てではなく、選択された値をテーブルの行数分取得
したいってことでよろしいでしょうか?

まず生成されたHTMLを覗いてみて、どんな値がPOSTされるかを確認しましょう。
<select name="ele[0].startTimeId">
<option value="hogehoge">
</select>
みたいな感じのソースになっていると思います。
name[0].paramのようなパラメータを受け取るとStrutsはリスト形式のパラメータ
であると解釈して、Formからnameで宣言されたリストを取得その中にparamを格納
しようと頑張ってくれます。
今回の場合ActionFormからeleのリストを取得しようとするが、アクセサがAction
Formで定義されていないので、エラーが発生する訳です。

と、ここまで書いて気付きましたがAction側でnullになるってことなので、エラー
が発生してる訳ではないのですか?
ひろんぽ
会議室デビュー日: 2005/07/20
投稿数: 1
投稿日時: 2005-07-20 12:20
いつもお世話になっております。
私もstruts初心者で、同じようなところで悩んでいます。

多分、内容としては同じことだと思いますので合わせて
教えていただけると助かります。

内容としまして、
@List形式で保持しているオブジェクトがある。
A @の情報を持ったFormbeanがある。
BそのFormBeanをJspで表示することはできる。
Cだが、表示されたJspからsubmitで次のactionを
 キックすると、FormBeanの中のオブジェクトがNullになる。
というような状況です。
簡単なソースですが、
コード:
■FormBean
private List dispList;
public void setList(ArrayList list){
  this.dispList = list;
}
public List getList(){
  for(int i=0;i<10;i++){
     nestedObject obj= new nestedObject(i,"あ"+i);
  }
  ※Listの中にnestedObjectを保持



コード:
■nestedObject.java
  private int selectedid;
  private String valueString;
  set~ 各setter
  get~ 各getter


コード:
■表示するJSP
<logic:iterate id="eliasname" name="FormBean" property="dispList"
  type="nestedObject"> 
  <html:textarea name="eliasname" property="selectedid" rows="1" cols="50"
  indexed="true" /><br> 
  <html:textarea name="eliasname" property="valueString" rows="1" cols="50"
  indexed="true" /><br> 
</logic:iterate> 
~サブミットボタン


上記、FormBeanの内容を表示することはできますが、
サブミットボタンを押された後に、「入力された」selectedidやvalueStringが
取れない状態です。

どなたか、ご教授をお願いします。



わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-07-20 13:21
返信ありがとうございます。

引用:

masaさんの書き込み (2005-07-20 12:09) より:
リストボックスの内容全てではなく、選択された値をテーブルの行数分取得
したいってことでよろしいでしょうか?



はい。その通りです。

引用:

<select name="ele[0].startTimeId">
<option value="hogehoge">
</select>
みたいな感じのソースになっていると思います。



確かにそのようになっています。

引用:

ActionFormからeleのリストを取得しようとするが、アクセサがAction
Formで定義されていないので、エラーが発生する訳です。



アクセサが定義されていないという事は、
-----ソース---------------------------------------------
public List getMailworkfbList() {
return mailworkfbList;
}
public void setMailworkfbList(List mailworkfbList) {
this.mailworkfbList = mailworkfbList;
}
-------------------------------------------------------
上記では、ダメという事でしょうか?
という事は、Listをクラス名に変更すると考えてよろしいのでしょうか?
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-07-20 13:38
こんにちは。

引用:

アクセサが定義されていないという事は、
-----ソース---------------------------------------------
public List getMailworkfbList() {
return mailworkfbList;
}
public void setMailworkfbList(List mailworkfbList) {
this.mailworkfbList = mailworkfbList;
}
-------------------------------------------------------
上記では、ダメという事でしょうか?



上記ではダメです。
何故かというと、サーバにPOSTされてくるデータはHTMLに記述された値
なわけであって、MailworkfbListという名前をPOSTされたデータから取
得することは出来ないからです。

<select name="ele[0].startTimeId">
<option value="hogehoge">
</select>
この形でHTMLが生成されたならば、Strutsへ提供するリストへのアクセサは
public List getEle() となるのが正解となります。
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-07-20 14:57
返信ありがとうございます。

引用:

この形でHTMLが生成されたならば、Strutsへ提供するリストへのアクセサは
public List getEle() となるのが正解となります。



下記のようにformbeanのsetterを変更して見た所
エラーは、表示されませんがListがまだnullの状態となっています。

---ソース-------------------------------------------
public void setEle(int i,Mailwork_fb mailwork){
if(mailworkfbList==null)mailworkfbList= new ArrayList();
mailworkfbList.add(i,mailwork);
}
----------------------------------------------------
setterが間違っていると思いますがどのように書けばいいか
分かりません。
ご教授お願いします。

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