使用OGNL自定义struts2 textfield标记的值

时间:2012-05-23 06:27:39

标签: java struts2 ognl

我有一个包含用户信息的数据库。当用户登录时,我在会话中注册了用户,如下所示:

ActionContext.getContext().getSession().put("loggedUser", user);

我希望在我的jsp页面中获取用户的信息,以使用此信息填充struts2文本字段。我尝试使用以下代码,但它不起作用:

<%@page import="java.util.Map"%>
<%@page import="com.opensymphony.xwork2.ActionContext"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="UbiMail.*" %>
<%@taglib  prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<%

        User user = (User) ActionContext.getContext().getSession().get("LoggedUser");
%>

<html>
<head>

</head>
<body>

    <s:form method="POST" action="UpdateAction">
        <s:actionerror/>
        <s:textfield name="uname" label="Username" value="#session.LoggedUser.getUsername"/>
        <s:property value="#session.LoggedUser.getUsername()"/>
        <s:password name="password" label="Password"/>
        <s:password name="cPassword" label="Confirm password"/>
        <s:textfield name="fname" label="First name" value="#session.loggeduser.getFname()"/>
        <s:textfield name="lname" label="Last name" value="#session.loggeduser.getLname()"/>
        <s:textfield name="popServer" label="POP server" value="#session.loggeduser.getPopServer()"/>
        <s:textfield name="popUsername" label="POP username" value="#session.loggeduser.getPopUsername()"/>
        <s:password name="popPassword" label="POP password"/>
        <s:textfield name="mobilePhone" label="Mobile phone" value="#session.loggeduser.getMobilePhone()"/>
        <s:textfield name="filter" label="Notification filter" value="#session.loggeduser.getSms()"/>
        <s:checkbox name="sms" label="Enable SMS notification"/>
        <s:submit value="Update"/>
    </s:form>
</body>

我想要你的帮助。

4 个答案:

答案 0 :(得分:2)

而不是这个

<s:textfield name="uname" label="Username" value="#session.LoggedUser.getUsername"/>

使用此

<s:textfield name="uname" label="Username" value='<s:property value="%{#session.loggedUser.getUsername}"/>'/>

在类似的说明中,你可以为你的其他领域做些事。

您的Java代码密钥中LoggedUserloggedUser不匹配的另一件事是loggedUser而不是LoggedUser,因此在jsp中使用loggedUser。< / p>

非主题: 我认为您不需要在jsp代码中使用scriptlet。

答案 1 :(得分:1)

此标记将生成名称为“uname”且值为“#session.LoggedUser.getUsername”的文本输入。

您想要从会话中读取值。当然,你可以这样读取价值:

<s:textfield name="#session.LoggedUser.getUsername" label="Username" value="#session.LoggedUser.getUsername"/>

但我不认为您需要输入名称为“#session.LoggedUser.getUsername”)

所以解决方案是:

<input type="text" name="uname" value="<s:property value="#session.LoggedUser.username"/>"/>

答案 2 :(得分:1)

On Struts 2.3的工作原理为:value="%{#session.loggedUser.username}"

答案 3 :(得分:-1)

这不起作用

 value="#session.LOGIN.name"

这是有效的

 value="%{#session.LOGIN.name}"