Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

検索画面で入力された検索キーを検索結果と一緒に表示したい?

初心者です…題名が的確ではないかもしれませんが、
ご教示の程、よろしくお願いいたします。

1つのJSPで、検索キーの入力欄と検索結果を一緒に表示しています。
初期は入力欄ブランク、検索結果テーブルヘッダのみが表示されます。
現在は、検索ボタンを押下すると、一覧に結果が表示され、入力欄はブランクになる状態です。

そこで教えて頂きたいのは、検索キーの値を検索結果を表示しても
残しておく(値を引き継ぐ?保持する?)方法です。

現在は検索結果は以下のように生成、表示しています。
■Action==============================================
    ResultSet result = stmt.executeQuery();

    ArrayList input = new ArrayList();

    while (result.next()) {
        DataBean ichiran = new DataBean();
        ichiran.setNo(result.getString("no"));
        ichiran.setName(result.getString("name"));
        
        input.add(ichiran);

        request.setAttribute("input", input);
    }
■JSP=================================================
<tr>
    <th>検索No</th>
    <td><input type="text" name="searchNo" value="" /></td>
</tr>
 〜〜〜略〜〜〜
<logic:present name="input">
    <logic:iterate id="List" name="input">
        <tr>
            <td><input type="radio" name="checkNo" value="" ></td>
            <td><bean:write name="List" property="no" /></td>
            <td><bean:write name="List" property="name" /></td>
        </tr>
    </logic:iterate>
</logic:present>
=====================================================

検索キーのinputのvalueに<bean:write>を使えないのか?と考え、色々調べて試しましたが行き詰まりました。
<bean:write name="List" property="searchNo" />を使うとすれば、
Actionはどのようなソースに修正する必要がありますか?

よろしくお願いいたします。

11

回答

11349

閲覧

11件の回答

評価

0

>入力欄はブランクになる状態です。

><tr>
>    <th>検索No</th>
>    <td><input type="text" name="searchNo" value="" /></td>
></tr>

そりゃ、明示的にブランクにしているからさ。

評価

0

>不良社員さん
仰るとおり、今は明示的にブランクになるようにしています。
言葉が悪かったです。。。状態ですというより、状態にしていますといった方が正しいかもしれません。
すみませんでした。

評価

0

でさ。
望みの状態にするにはどうすればいいかは、わかったのかな?

評価

0

>不良社員さん
まだです。。。
リクエストにセットして、JSPにJavaべた書きで取得しようとしましたが、色々修正してもうまく行きませんでした。。。

評価

0

現状なら、
value="<bean:write .../>"
で済んじゃうんじゃないの。

俺なら、html:textを使うけどね。

評価

0

>不良社員さん
すみませんが、気になる点を確認させてください。

<bean:write name="List" property="searchNo" />を使うとすれば、
while文の外でrequest.setAttribute("List", searchNo)を行えばよいのでしょうか?

    ResultSet result = stmt.executeQuery();
    ArrayList input = new ArrayList();
    while (result.next()) {
        DataBean ichiran = new DataBean();
        ichiran.setNo(result.getString("no"));
        ichiran.setName(result.getString("name"));
        input.add(ichiran);
        request.setAttribute("input", input);
    }
    con.close();
    initCon.close();
    
    request.setAttribute("List", searchNo);

上記のようにして、<bean:write name="List" property="searchNo" />を使うと
javax.servlet.jsp.JspException: Bean List のプロパティ searchNo に対するゲッターメソッドがありません
という風になってしまいました。
struts-config.xmlのform-propertyには、ちゃんと記述しましたし
ActionFormにもゲッターセッターは記述しています。
あと、searchNoがnullになる場合は""(空)を当てはめるように追記してあります。

もしかして私、トンチンカンなことをしていたりしますか?

評価

0

>request.setAttribute("List", searchNo);

これは、本当に間違いないの?
searchNoの実体がなんなのか、どこにもないから判断つかんがね。
このうえで、foward先が
<bean:write name="List" property="searchNo" />
てな記述だと、
「JSPにおいて、Listというキーで検索されたBeanがgetSeractNo()を持っている」
-> Actionにおいて、変数serchNoに格納されたActionFormが、searchNo()を持っている、
ってことになるぞ。

>気になる点を確認させてください。

今までひとつでもいいから、
Strutsタグで構成されたページの表示に成功したことあるの?

評価

0

>不良社員さん

>searchNoの実体がなんなのか、どこにもないから判断つかんがね。
以下のようなソースになっています。
検索画面に入力された検索キーを当てはめています。
その値と検索結果を、その検索画面に表示する感じです。

    DataBean searchData = (DataBean) actionForm;
    String searchNo = searchData.getSearchNo();
    〜〜略〜〜
    先ほど書いたResultSet以下のソースが入ります
    
肝心な事を書き忘れた事に今気づきました。。。すみません。
気になっているのは、1つのJSPを呼ぶときに、
利用したいBean名が2つ存在してもよいものなのか、という事です。
<logic:iterate>のidをListにしている為、<bean:write>のnameもListになっていますが
Actionでは"input"でリクエストにセットします。
それとは別に、request.setAttribute("List", searchNo)は
"List"でsearchNoをリクエストにセットしています。なので、
<bean:write name="List" property="searchNo" />を使おうとしました。
。。。これを書いていて思いましたがが、もしかして
利用したいBean名は2つ存在できないから、
ゲッターメソッドがありませんとエラーになっているんでしょうか?

>Strutsタグで構成されたページの表示に成功
まだ始めたばかりなので、数はこなしていませんが
簡単なものは勉強でも仕事でも作りました。
一覧表示、新規登録、変更の画面程度です。

よろしくお願いいたします。

評価

0

>不良社員さん
すみません。。。

>request.setAttribute("List", searchNo);
>これは、本当に間違いないの?
仰っている通りのイメージでソースを書きました。
ですが正直、あっているかの判断がつきません。。。

評価

0

なんか、仕様が自分の期待通りであれば、期待通りに動作する、
てな願望が見え隠れしているように見えるが、気のせいか?
んな不毛なことをしているヒマがあったら、
リファレンスを読みたまえ。

しかし今回の場合は、次が原因じゃないの?

>request.setAttribute("List", searchNo);
>仰っている通りのイメージでソースを書きました。

そう?
だったらsearchNoじゃなくて、searchDataじゃないの?

>ですが正直、あっているかの判断がつきません。。。

コンピュータというものは、コードの通りに動作するものだ。
世の中には仕様書というものがあるんだ。
「自分は○○をやってます」ってきちんと説明できるようになるこった。

自分がなにをやってるのかわかってないヤツの
手伝いなんか、できる人間なんていないよ。

評価

0

>不良社員さん
ご教示ありがとうございました。

 searchData.setSearchNo(searchNo);
 request.setAttribute("List", searchData);

ご指摘の通り、上記で解決しました。

こんな事で2日も潰してしまったことがアホらしいくらい、簡単な話でしたね。。。
失礼しました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。