我的会话中有一个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中找到关于这个东西的好参考。 非常感谢任何帮助。
答案 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}" />!
<a href="Logout.action">Logout</a>
</s:if>
请注意访问会话对象方法/数据成员的语法。虽然我没有在某处详细阅读,但我猜测:
从那里,结果是用于访问对象及其方法/成员的普通点运算符。
我是新手,但似乎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,对吗?