- PR -

頁替えロジックのlogic:iterate(JSP)とビューオブジェクト間での値の引渡しについて

投稿者投稿内容
T_DRAGON_2000
会議室デビュー日: 2004/01/20
投稿数: 18
投稿日時: 2007-01-23 17:44
現在頁換えのロジックを構築中ですが、どうにもOFFSET等の情報が引き渡せません。
繰返し行は渡せたのですが、OFFSET、LENGTH、行数の頭の数字を渡せないのです。

下記は、LENGTHの値の引渡しを中心に記述しました。(OFFSETや行頭番号も同様です)

ビューオブジェクト抜粋
public class testVO extends BaseEntity {

private List list = new ArrayList();

public List getList() {
return list;
}

public String getMaxLine() {
return String.valueOf(this.getMaxLine_i()); <--計算した結果が格納される
}
public int getMaxLine_i() {
return maxLine_i;
}
public void setMaxLine_i(int maxLine_i) {
this.maxLine_i = maxLine_i;
}
}

アクション
・・・
List list = ac.getAdminList(admin); <--SQL発行してリストで戻ってくる
list_vo.setList(list); <--リストで格納
list_vo.setMaxLine_i(maxCount); <--そのまま格納
request.setAttribute("ListVO", list_vo);
・・・

JSP抜粋
・・・
<% int j = 0; %> <--行頭番号はこの0に置き換えたい
<logic:iterate id="d_rec" name="ListVO" property="list"
offset='<bean:write name="ListVO" property="offset" />' <--これが取得できない
length='<bean:write name="ListVO" property="maxLine" />' <--これが取得できない
>
<tr>
<td align="center" class="cell_01"><%=j + 1 %></td>
<td align="center" class="cell_01"><bean:write name="d_rec" property="aaa" /></td> <--リストの情報は取得できる。
<td align="center" class="cell_01"><bean:write name="d_rec" property="bbb" /></td>
<td align="center" class="cell_01"><bean:write name="d_rec" property="ccc" /></td>
</tr>
<% j++; %>
</logic:iterate>
・・・

どうすればいいでしょうか?よろしくお願いします。

環境は、WEBLOGIC+ORACLEです。


nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-23 19:04
そもそも「OFFSET、LENGTH、行数の頭の数字」というのはどこから来るのですか?

1ページに表示される件数が10件だと仮定します。
検索を行った際に最初の10件が表示されるわけですね。
そして、なにかしらのボタンを押すなり、リンクをクリックするなりして
次の10件を表示しようとするでしょう。
その際、どこのページを表示しようとしたのかをサーバに渡す必要があります。
どうやってそのパラメータを渡そうとしていますか?

サーバ側では受け取ったパラメータをビューオブジェクト
(JSPに渡す際のオブジェクトのことを指してこう言っているのだと思います)に
設定してやらなければなりません。
Strutsなどのフレームワークを使用している場合、そのあたりの処理を
フレームワークでやってくれる場合もありますが、今回はどうやって渡していますか?

そもそも、そんな作りじゃないというのであれば設計が問題ですし、
そのパラメータがサーバ側で取得できていないのであれば、
サーバに渡す場所に問題があるわけですし、
サーバで取得できているにもかかわらず、JSPで表示できないのであれば
JSPへ渡す箇所に問題があるのでしょう。
T_DRAGON_2000
会議室デビュー日: 2004/01/20
投稿数: 18
投稿日時: 2007-01-24 09:58
回答ありがとうございます。
ご指摘の部分をご説明します。
アクションでビューオブジェクト(ListVO)にSQLで取得した結果データセットをリストで格納します。
その際、画面に表示すべき行数(iteraterのLENGTH)をListVOの1項目(maxLine)として格納します。
ビューオブジェクトをリクエストに格納します。

JSP側ではlogic:iterateにて、ビューオブジェクト名をnameに指定しproperty="list" id="d_rec"としています。
ループ中の<bean:write name="d_rec" property="aaa" />は、
別途、ゲッターを設定してあって、getAaaのような感じで定義してあり、実行して正しく取得できています。
問題のoffsetとmaxLineですが、
offset='<bean:write name="ListVO" property="offset" />' <--これが取得できない
length='<bean:write name="ListVO" property="maxLine" />' <--これが取得できない
getMaxLineというゲッターメソッドは定義してはあるのですが、どうも0でわたっているようでもなく、このoffsetとlengthがきいていないような感じです。
表示を見ると、常に1行目から全行が表示されています。


このような説明でよろしいでしょうか?
requestにアトリビュート設定でoffsetやlengthを直接格納するのではなく、ビューオブジェクト経由で設定取得したいのです。

よろしくお願いします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-24 12:26
引用:

T_DRAGON_2000さんの書き込み (2007-01-24 09:58) より:
getMaxLineというゲッターメソッドは定義してはあるのですが、どうも0でわたっているようでもなく、このoffsetとlengthがきいていないような感じです。


問題点が伝わらなかったようなので再度聞きますが、
そのgetterで取得できる値を設定している場所はどこですか?
何も設定していないのに値が沸いて出るわけはないわけですが。
T_DRAGON_2000
会議室デビュー日: 2004/01/20
投稿数: 18
投稿日時: 2007-01-24 14:09
何度も回答ありがとうございます。

ゲッターはJSP上で実行しています。
設定は、アクションの中でsetMaxLineを発行しています。

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-24 19:36
引用:

T_DRAGON_2000さんの書き込み (2007-01-24 14:09) より:
設定は、アクションの中でsetMaxLineを発行しています。



その段階で確かに正しい値が入っていることは確かめたのですか?
T_DRAGON_2000
会議室デビュー日: 2004/01/20
投稿数: 18
投稿日時: 2007-01-25 10:52
nagise殿

昨日はネットワーク障害がでて返信できませんでした。

JSPにデバッグを打ち込んでみました。

OFFSET =<bean:write name="ListVO" property="offset" /> 
MAX_LINE=<bean:write name="ListVO" property="maxLine" /> 
cur_page=<bean:write name="ListVO" property="page_no" />

画面ででてきたもの(例)
OFFSET =20  MAX_LINE=20  cur_page=2

これで取得できているので、取り出してiterateで使いたいだけなのです。
よろしくお願いします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-25 11:12
引用:

T_DRAGON_2000さんの書き込み (2007-01-25 10:52) より:
OFFSET =<bean:write name="ListVO" property="offset" /> 
MAX_LINE=<bean:write name="ListVO" property="maxLine" /> 
cur_page=<bean:write name="ListVO" property="page_no" />

画面ででてきたもの(例)
OFFSET =20  MAX_LINE=20  cur_page=2

これで取得できているので、取り出してiterateで使いたいだけなのです。



あ〜。やっと何を問題としているのか分かりました。
logic:iteratorのoffset属性に動的な値を設定する際の書き方が分からない
って話だったのですね…。

Strutsなのですかね?
私は最近長いことStrutsをいじっていませんが
コード:
<bean:parameter id="tempOffset" name="ListVO" property="offset" />
<logic:iterate id="d_rec" name="ListVO" property="list" 
  offset="tempOffset">
...
</logic:iterate>


みたいにするんでしたっけ?
Strtus現役の識者の方、サポートお願いします。

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