[Seasar-user:14151] [Teeda] ArrayListの項目1個の値が0になる。

Yuu Koseki [E-MAIL ADDRESS DELETED]
2008年 5月 14日 (水) 13:17:44 JST


いつもお世話になります。
小関と申します。

PAGEファイルに宣言されたArrayList変数値がDBfluteで値を取ってきた直後には
値がちゃんと入ってるのに (Prerenderの時)その後doボタンを押下すと
値が部分なくなります。(正確に言えば0になります。)
自分なりに調査して見ても解決できなくて投稿します。

本ページファイルのMainPage.javaの
public void prerender() {		
	getData();
}

public void getData(){
	AmountCB amountCB=new AmountCB();	
	amountCB.query().addOrderBy_Orderid_Desc();	
	dbItems = amountBhv.selectList(amountCB);
	dataItems = samDxo.ListConvert(dbItems);
	System.out.println("getData "+dataItems.get(2).getOrderid());
    //ここには.getOrderid()に値が2と正しく入っています。
}

でもその後doUpdate()メソッドを実行したら
public Class doUpdate(){	
	System.out.println("doUpdate" + dataItems.get(2).getOrderid()); 
        //getOrderid()は0が入ってる。
    //データベースには2が格納されてれるし、consoleに2が出力されるはずなのに。)
	System.out.println("getDetail" + dataItems.get(2).getDetail());
        //ちゃんと'おはよう'と値が入ってる。		
	return UpdatePage.class;
}

因みにdataItems , dbItemsは
	public ArrayList<ListDto> dataItems; 
	public ListResultBean<Amount> dbItems;
と宣言されています。
ListDtoは
private String subjectcode;
	private String detail;
	private int amount;
	private String plus;
	private String minus;
	private int orderid; 
    private boolean chk;
とgetter/setterが宣言されている普通のDtoです。
でもprerender時ちゃんと値が各項目に入ってるのに
その後何も特別処理がないまま単純にdoUpdateボタンを
押したらdoUpdateメソッドの中にorderid値だけがなくなっています。
なくなつているより0になっています。(nullではない。)

MainPage.javaの宣言部には
public String subjectcode;
public String detail;
public String orderid;
public int amount;
public String plus;
public String minus;	
public boolean chk;	
とちゃんと普通に宣言されています。

<table border="1">
<div id="dataItems">
<tr align="center">
<td width="22"><input type="checkbox" id="chk" readonly="0"/></td>
<td width="60"><input type="text" id="subjectcode" size="7" readonly="1"/></td>
<td width="140"><input type="text" id="detail" size="25" readonly="1"/></td>
<td width="60"><input type="text" id="amount" size="8" readonly="1"/></td>
<td width="60" ><input type="text" id="plus" size="1" readonly="1" /></td>
<td width="60" ><input type="text" id="minus"  size="1" readonly="1"/></td>
<input type="hidden" id="orderid"/>
</tr>
</div>
</table>

と宣言されています。
<input type="hidden" id="orderid"/>の部分は
元々ありませんでしたが、今の問題が起きた時解決のために
入力した部分です。(でもそれで解消出来ませんでした。)

doUpdateボタンは
<input type="button" value="Update" id="doUpdate"></input>
とコーディングされています。

この現象の原因と解決方を御存じの方はお答えお願いします。


Seasar-user メーリングリストの案内