Настройте значение тега текстового поля 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 ответа
Вместо этого
<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.
На Struts 2.3 работает: value="%{#session.loggedUser.username}"
Этот тег будет генерировать ввод текста с именем "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"/>"/>
Это не работает
value="#session.LOGIN.name"
Это работает
value="%{#session.LOGIN.name}"