简体   繁体   English

使用OGNL自定义struts2文本字段标记的值

[英]Customize the value of struts2 textfield tag using OGNL

I have a database with a user information. 我有一个包含用户信息的数据库。 When the user is logged on, I registered the user on the session as follow: 当用户登录后,我在会话上注册了用户,如下所示:

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

And I want to get the user's information in my jsp page to fill the struts2 textfields with this info. 我想在我的jsp页面中获取用户信息,以便用此信息填充struts2文本字段。 I tried to use the following code, but it does not work: 我尝试使用以下代码,但是它不起作用:

<%@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>

I want your help, please. 请给我帮助。

Instead of this 代替这个

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

use this 用这个

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

On a similar note you can do for rest of your fields. 类似地,您可以对其余字段执行操作。

Another thing you are mismatching LoggedUser and loggedUser , in your Java code key is loggedUser and not LoggedUser , so in jsp use loggedUser . 另一个与LoggedUserloggedUser不匹配的东西是,在Java代码密钥中是loggedUser而不是LoggedUser ,因此在jsp中使用loggedUser

Off topic: I don't think you need to use scriptlet in your jsp code. 主题外:我认为您不需要在jsp代码中使用scriptlet。

This tag will generate text input with name "uname" and value "#session.LoggedUser.getUsername". 此标记将生成名称为“ uname”且值为“#session.LoggedUser.getUsername”的文本输入。

Your want to read value from the session. 您想从会话中读取价值。 Of course, your can read value this way: 当然,您可以通过以下方式读取值:

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

but i don't think that your need input with name "#session.LoggedUser.getUsername" ) 但我不认为您需要输入名称为“#session.LoggedUser.getUsername”)

So the solution is: 因此解决方案是:

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

在Struts 2.3上有效: value="%{#session.loggedUser.username}"

This is not working 这不行

 value="#session.LOGIN.name"

This is working 这工作

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM