Struts JSP:从会话信息中设置textfield值

时间:2009-09-02 09:22:10

标签: jsp session struts textfield

我的会话中有一个DLPUser对象,这个DLPUser基本上是一个容器,用于字符串,整数和一些有用的信息。

(这是我在java中的action类中的代码片段)

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中找到关于这个东西的好参考。 非常感谢任何帮助。

5 个答案:

答案 0 :(得分: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 {

我的会话变量是User的数据成员:

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评估{}
  • 中的表达式
  • 会话可以访问会话堆栈/对象吗?

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

我是新手,但似乎UserModel的数据成员是私有的无关紧要,JSP无论如何都可以访问它们。

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

public String logoutUser()
{
    session.remove("User");
    return SUCCESS;
}

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我明白了...非常感谢你的回答。欧麦尔 ;) 但是有更简单的方法吗? 我的意思是,如何在

中使用java对象或变量
<s:textfield value=????>

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

怎么样?

我认为这不仅仅适用于支柱。但也可以应用于普通的jsp 喜欢 所以我的问题是???里面的内容。 非常感谢你

(我现在无法测试,但这会有效吗?)

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

我是否会闭嘴?

答案 3 :(得分:1)

再说一遍。如果需要直接访问Java bean(并绕过会话),可以使用以下语法:

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

答案 4 :(得分:0)

你应该可以这样做:

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

您不需要在示例中使用名称前面的“get”。而且,看起来Umar的答案就是Struts1的一个例子。你正在使用Struts 2,对吗?