プロが教える店舗&オフィスのセキュリティ対策術

strutsにてシステムを作成していますが、
strutsが初めてなため、悩んでいます。

formクラスとActioクラスとjspとDBを使い、DBに登録はできました。
今度はDBに登録したものを変更したいのですが、どうやればいいのか分かりません。ネットで探してもいい情報はありませんでした。

会員が登録→ログイン→その後、変更処理をしたいのですが、
(1)「a」の情報を持っている会員がいます。この会員がログインしたらこいつのもってる情報は「a」だとどうやったらわかるのか?
(2)「a」を「b」に変更する時、テキストボックス(<html:text)にDBから引っ張って来た「a」を表示させるのか?

更新のサンプルをください。

A 回答 (5件)

一般的な作りとしては、ログイン情報などはセッションを利用して保持します。


ログインユーザクラスのようなものを作り、
ログイン時に会員IDをセットして、ログインユーザをセッションに保持する。
(例 入力された ID/パスワード でDBから会員情報取得し、
LoginUser loginUser = new LoginUser()
loginUser.serUserId(DBの会員ID)
request.getSession().setAttribute("loginUser", loginUser);
)

必要なとき(今回であればSELECT時)に、セッションからユーザ情報を取り出して、現在誰がログインしているかを判断する。

という方法がよいのではないでしょうか。
    • good
    • 0
この回答へのお礼

返事遅くなりすみません。

現在、URLリライティングでsessionが保持されている事が分かりました。
しかし、URLリライティングでのsessionの取得方法が分からず困っています。
教えて頂けませんか?

お礼日時:2009/11/04 19:05

<html:text にも、name 属性と property 属性がありますので、


bean:write 同様にJSPで指定すれば表示可能だと思いますよ。

ただ、リストを更新する際は、indexed 属性も true にする必要があります。
    • good
    • 0
この回答へのお礼

本当にありがとうございます。
テキストエリアにDBから取得した値が出力され、無事にDBの更新ができました。
あとは、ログインした会員がどの会員なのかを判定して、テーブルからどの行の値を持ってくるのかを決めるという事ですよね。

できればそちらも教えて頂けないでしょうか?

お礼日時:2009/10/29 17:33

Struts で開発する上では、


JSPで表示したりする値は ActionForm に格納します。

ですので、自分で request.setAttribute したりすることはあまりありません。
例のように、<html:text property="isbn" size="20" ~
であれば、ActionForm の isbn フィールドに値をセットすることでテキストフィールドの value に自動でセットしてくれます。

list ということは複数の表示を行うのでしょうか?
その場合は、html:text の indexed 属性を true にすることで、
isbn[添字]と、配列のように扱うことができます。

タグの使い方は以下などを参考にしてみてください。
http://tag.main.jp/
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
    • good
    • 0
この回答へのお礼

サンプルを動かそうとしましたが、form生成時にエラーがでたり
struts1.3ではstruts-confのdataSourceができないため
断念しました。

formではsetとgetを行っています。
テキストエリア以外ならばDBから値をJSPに表示できます。
例えば、検索したい時はselect文で検索した複数の値をもって来て
値をsetして、request.setAttributeする。
jsp側でlogic:iterateで
<bean:write name="" property="" />
すれば出力できますよね?

同様に更新時もselect文で検索した複数の値をもって来て
値をsetして、request.setAttributeする。
jsp側でどうやれば
テキストエリアに値を出力させるかがわからないのです。

お礼日時:2009/10/28 17:35

ここにサンプルがありましたよ。


ちょっと見づらい気もしますが、、、

http://www.atmarkit.co.jp/fjava/rensai3/struts06 …
    • good
    • 0
この回答へのお礼

サンプルありがとうございます。
このサンプルでは
  <logic:equal name="update.flag" value="true">
<html:text property="isbn" size="20" maxlength="20"
style="background:#EEeeEE" readonly="true" />
</logic:equal>
<logic:notEqual name="update.flag" value="true">
<html:text property="isbn" size="20" maxlength="20" />
</logic:notEqual>
でテキストエリアにDBから取得した値を入れていますが
この方法以外でDBから取得した値をテキストエリアに出力するしかないのでしょうか?

自分の場合
Actionクラス
(1)SQL文をしてwhileでDBの値取得
(2)値をlistに入れてrequest.setAttribute

jSP
テキストエリアではない場合は
logic:iterateで
<bean:write name="" property="" />
で出力されますが
テキストエリアの場合はどのようにして
出力させれば良いでしょうか?

お礼日時:2009/10/27 20:32

会員情報に「会員ID」などの主キーがあれば、


まず変更画面アクセス時に会員IDでSELECTし、会員情報を取得します。

会員の情報(名前など)を、ActionForm クラスのテキストボックス(html:text の property属性)に該当するフィールドにセットする。

そしてJSPを表示すると、そのテキストボックスに value がセットされた状態で表示されます。
どの会員を更新するかどうかは、<html:hidden> タグなどで、会員IDを html に埋め込んでおくことで判断します。

更新ボタンを押下した際は、text の value と、 hidden の value がサブミットされてきますので、該当会員IDの情報を再度取得して text の value をセットし、UPDATE 文を投げます。

このような説明でわかりますでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
おっしゃっている事は理解できましたが
もしよかったら簡単で良いので
サンプルを頂けないでしょうか。

お礼日時:2009/10/26 15:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!