2009-09-02 11 views
2

私のセッションにはDLPUserオブジェクトがあります。このDLPUserは基本的にStrings、ints、およびいくつかの有益な情報のコンテナです。Struts JSP:セッション情報からテキストフィールド値を設定します

(これは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"/> 

これは簡単なことになって...しかし、私は立ち往生午前と支柱とJSPにこの事についての適切な参照を見つけることができませんされています。 ご協力いただきありがとうございます。

答えて

5

私はこれを自分自身で行う方法を学習していました。このディスカッションは参考になりました。これは、さまざまなウェブページの素材と「Struts 2 in Action」という本を組み合わせることで、私が必要とされていた場所に私をもたらしました。

Nateと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は単なるデータメンバーの単純なクラスであり、ge tter /セッター)

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; 
    } 
    
    +0

    元の構文 '#session.user.name'はプロパティタグ内で動作します。それはテキストフィールドのタグで動作しませんが、私はなぜそれがわかりません。また、UserModelのプロパティはプライベートですが、Userオブジェクト(マップ上に配置したもの)にアクセスするため、プロパティを非公開でアクセスできます。 – jsky

    +0

    それが ''で動作するように私のコメントを見てください –

    1

    私はあなたの答えに非常に感謝します。 Umar ;) もっと簡単な方法はありますか? 私はどのように私は財産の場合には、たとえば

    <s:textfield value=????> 
    

    内のJavaオブジェクトまたは変数を使用することができ、意味: は私のユーザー名(セッションVARから)

    方法についての内容をプリントアウトでしょうか?

    私はこれがストラットのためだけではないと思います。しかし、普通のjsp のようにも適用することができます 私の質問は???の中に入るのでです。 は私がclosserを取得しています

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

    (私は今テストすることはできませんが、この作品は、でしょうか?)非常に

    をいただき、ありがとうございますか!

    0

    あなたは行うことができる必要があります:

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

    あなたはあなたの例では持っていたとして、名前の前に「取得」する必要はありません。また、Umarの答えがStruts1の例だと思われます。 Struts 2を使用していますが、正しいですか?

    +1

    私は試しましたが、上記のコードでは#session.user.name(文字通り)がテキストフィールド内に表示されています。 #session.user.nameは評価されていません...そうです。 – nacho4d

    1

    ちょっと別のメモ。

    <s:textfield name="userBean.username" maxlength="30" value="%{userBean.username}" ></s:textfield> 
    
    1

    <s:textfield value="%{#session.user.name}"/>が私の仕事:あなたが直接あなたのJava Beanにアクセスする必要がある(とセッションをバイパスする)場合は、次の構文を使用することができます。

    関連する問題