Настройте значение тега текстового поля 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>

I want your help, please.


person SSMZ    schedule 23.05.2012    source источник


Ответы (4)


Вместо этого

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

использовать этот

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

То же самое вы можете сделать и для остальных полей.

Другое дело, что вы не соответствуете LoggedUser и loggedUser, в вашем коде Java ключ loggedUser, а не LoggedUser, поэтому в jsp используйте loggedUser.

Не по теме: я не думаю, что вам нужно использовать скриптлет в вашем коде jsp.

person mprabhat    schedule 23.05.2012

This tag will generate text input with name "uname" and value "#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"/>"/>
person Vasily Komarov    schedule 23.05.2012
comment
Извините, я пытался использовать ваше решение, но оно не работает. Спасибо за ваше время :) - person SSMZ; 23.05.2012
comment
Я думаю, что ошибка в #session.LoggedUser.username должна быть #session.loggedUser.username. К сожалению ) - person Vasily Komarov; 23.05.2012

На Struts 2.3 работает: value="%{#session.loggedUser.username}"

person Picrochole    schedule 09.09.2013

Это не работает

 value="#session.LOGIN.name"

Это работает

 value="%{#session.LOGIN.name}"
person Rakesh Ray    schedule 26.05.2015