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"/>

这应该很简单......但我被卡住了,在struts和jsp中找不到关于这个东西的好参考。非常感谢任何帮助。

4

5 回答 5

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 是仅包含数据成员及其 getter/setter 的简单类)

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 计算 {} 内的表达式
  • session 让您访问会话堆栈/对象?

从那里,结果是用于访问对象及其方法/成员的普通点运算符。

我是这方面的新手,但似乎 UserModel 的数据成员是否是私有的也没关系,JSP 无论如何都可以访问它们。

哦。最后一点,为了让它“完整”,注销怎么样?我用于注销操作的 java:

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

<s:textfield value="%{#session.user.name}"/>为我工作。

于 2014-10-25T17:48:48.607 回答
1

我明白了...非常感谢您的回答。奥马尔 ;) 但是有更简单的方法吗?我的意思是,我怎样才能在里面使用java对象或变量

<s:textfield value=????>

例如在属性的情况下:将打印出我的用户名的内容(来自会话 var)

怎么样 ?

我认为这不仅适用于struts。但也可以应用于普通的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 回答
1

只是另一个注释。如果您需要直接访问您的 Java bean(并绕过会话),您可以使用以下语法:

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

你应该能够做到:

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

您不需要像示例中那样在名称前面加上“get”。此外,看起来 Umar 的答案是 Struts1 的一个例子。您使用的是 Struts 2,对吗?

于 2009-09-03T02:41:21.597 回答