2

セッションに DLPUser オブジェクトがあります。この DLPUser は基本的に、文字列、整数、およびいくつかの有用な情報のコンテナーです。

(これは、Java のアクション クラス内のコードの一部です)

Map <String, Object> session = ActionContext.getContext().getSession();
session.put("logged-in","true");
session.put("user", user); //user is DLPUser user = new DLPUser();

ここで、user.getName(); の値を表示したいと思います。一部の JSP の textField 内でこれを行うにはどうすればよいですか? 私は Struts タグを使用していますが、以下は機能しませんでした。

<s:textfield label="Name" name="name" value="<% session.user.getName(); %>"/>

また

<s:textfield label="Name" name="name" value="#session.user.getName"/>

これは単純なはずです...しかし、私は立ち往生しており、strutとjspでこのことについての良い参照を見つけることができません. どんな助けでも大歓迎です。

4

5 に答える 5

5

私は自分でこれを行う方法を学んでいました、そしてこの議論は役に立ちました。これは、さまざまなWebページの資料と「Struts2 in Action」という本を組み合わせることで、必要な場所にたどり着きました。

ネイトとnacho4dの答えはマークに近いです。これが私がしたことです:

必要なインポート:

import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.SessionAware;

私のアクションクラス(「ユーザー」)宣言:

public class User extends ActionSupport implements SessionAware {

私のセッション変数はユーザーのデータメンバーです:

Map <String, Object> session;

次に、ユーザーを認証する私のメソッドで(UserModelはデータメンバーとそのゲッター/セッターだけの単純なクラスであることに注意してください)

UserModel user;
...
session.put("User", user);

最後に、私のjspファイルで:

            <s:if test="%{#session.User.isLoggedIn()}">
                Welcome back, <s:property value="%{#session.User.firstName}" />
                <s:property value="%{#session.User.middleName}" />
                <s:property value="%{#session.User.lastName}" />!
                &nbsp;&nbsp;&nbsp;&nbsp;
                <a href="Logout.action">Logout</a>
            </s:if>

セッションオブジェクトのメソッド/データメンバーにアクセスする構文に注意してください。私はそれをどこかで詳細に読んでいませんが、私はそれを推測しています:

  • %{}は、{}内の式を評価するようにjspに指示します
  • セッションを使用すると、セッションスタック/オブジェクトにアクセスできますか?

そしてそこから、結果はオブジェクトとそのメソッド/メンバーにアクセスするための通常のドット演算子になります。

私はこれの初心者ですが、UserModelのデータメンバーがプライベートであるかどうかは問題ではないようです。JSPはとにかくそれらにアクセスできます。

おー。最後にもう1つ、「完全」にするために、ログアウトしてはどうでしょうか。ログアウトアクションのJava:

public String logoutUser()
{
    session.remove("User");
    return SUCCESS;
}
于 2010-03-11T18:48:38.643 に答える
1

もう一つメモ。Java Bean に直接アクセスする (そしてセッションをバイパスする) 必要がある場合は、次の構文を使用できます。

<s:textfield name="userBean.username" maxlength="30" value="%{userBean.username}"  ></s:textfield>
于 2010-11-06T17:56:42.247 に答える
1

なるほど・・・ご回答ありがとうございます。Umar ;) しかし、もっと簡単な方法はありますか? つまり、Javaオブジェクトまたは変数を内部で使用するにはどうすればよいですか

<s:textfield value=????>

たとえば、プロパティの場合:ユーザー名の内容を出力します(セッション変数から)

どうですか?

これはストラットに限ったことではないと思います。のような通常の jsp にも適用できます。どうもありがとうございました

(今はテストできませんが、うまくいきますか?)

<% Map session = ContextAction.getContext().getSession(); %>
<s:textfield value="%{session.user.name}"/> or
<s:textfield value="%{session.get("user").getName()}"/>

私は近づいていますか?

于 2009-09-02T11:24:37.860 に答える
0

あなたはできるはずです:

<s:textfield label="Name" name="name" value="#session.user.name"/>

例のように、名前の前に「get」を付ける必要はありません。また、Umarの回答はStruts1の例のようです。Struts 2 を使用していますよね?

于 2009-09-03T02:41:21.597 に答える