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

nac*_*o4d 2 session jsp 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();
Run Code Online (Sandbox Code Playgroud)

现在我想显示user.getName()的值; 在某些JSP中的textField内部我该怎么做?我正在使用Struts标签,以下不起作用.

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

要么

<s:textfield label="Name" name="name" value="#session.user.getName"/>
Run Code Online (Sandbox Code Playgroud)

这应该是简单的......但我陷入困境,无法在struts和jsp中找到关于这个东西的好参考.非常感谢任何帮助.

Iai*_*ain 5

我自己也在学习如何做到这一点,这次讨论很有帮助.这一点,来自各种网页的材料和"Struts 2 in Action"这本书让我走到了我需要的地方.

Nate和nacho4d的答案接近标准.这是我做的:

所需进口:

import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.SessionAware;
Run Code Online (Sandbox Code Playgroud)

我的动作类("用户")声明:

public class User extends ActionSupport implements SessionAware {
Run Code Online (Sandbox Code Playgroud)

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

Map <String, Object> session;
Run Code Online (Sandbox Code Playgroud)

然后,在我验证用户的方法中(注意UserModel只是数据成员及其getter/setter的简单类)

UserModel user;
...
session.put("User", user);
Run Code Online (Sandbox Code Playgroud)

最后,在我的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>
Run Code Online (Sandbox Code Playgroud)

请注意访问会话对象方法/数据成员的语法.虽然我没有在某处详细阅读,但我猜测:

  • %{}告诉jsp评估{}内的表达式
  • session会让您访问会话堆栈/对象吗?

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

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

哦.最后一点,为了让它"完整",退出怎么样?我的java用于注销操作:

public String logoutUser()
{
    session.remove("User");
    return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)