¿Podrías ayudarme a escribir un análogo de estilo Spring MVC de este código?
session.setAttribute("name","value");
¿Y cómo agregar un elemento anotado por @ModelAttribute
anotación a la sesión y luego obtener acceso a él?
fuente
¿Podrías ayudarme a escribir un análogo de estilo Spring MVC de este código?
session.setAttribute("name","value");
¿Y cómo agregar un elemento anotado por @ModelAttribute
anotación a la sesión y luego obtener acceso a él?
Si desea eliminar el objeto después de cada respuesta, no necesita sesión,
Si desea conservar el objeto durante la sesión del usuario, hay algunas formas:
agregue directamente un atributo a la sesión:
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
return "testJsp";
}
y puedes obtenerlo del controlador de esta manera:
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
Haga que su sesión de controlador tenga un alcance
@Controller
@Scope("session")
Alcance los objetos, por ejemplo, tiene un objeto de usuario que debería estar en sesión cada vez:
@Component
@Scope("session")
public class User
{
String user;
/* setter getter*/
}
luego inyecta clase en cada controlador que quieras
@Autowired
private User user
que mantiene la clase en sesión.
La inyección de proxy AOP: en spring -xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean id="user" class="com.User" scope="session">
<aop:scoped-proxy/>
</bean>
</beans>
luego inyecta clase en cada controlador que quieras
@Autowired
private User user
5.Pase HttpSession al método:
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
6.Haga ModelAttribute en sesión por @SessionAttributes ("ShoppingCart"):
public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}
o puede agregar el modelo a toda la clase de controlador como,
@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {
@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}
cada uno tiene ventajas y desventajas:
@session puede usar más memoria en los sistemas en la nube; copia la sesión en todos los nodos, y el método directo (1 y 5) tiene un enfoque desordenado, no es bueno para la prueba unitaria.
Para acceder a la sesión jsp
<%=session.getAttribute("ShoppingCart.prop")%>
en Jstl:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
en Thymeleaf:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>
User
bean solo funcionará si está llamando al bean en una clase que también tiene unsession
alcance, de lo contrario, si no existe una sesión, arroja una excepción, ya que no habría ninguna sesión activa en el contexto @runtime cuando inyectamos eluser
bean en otra clase !!Utilizar
@SessionAttributes
Consulte los documentos: Uso de @SessionAttributes para almacenar atributos de modelo en la sesión HTTP entre solicitudes
" Comprender los atributos de sesión y modelo de Spring MVC " también ofrece una muy buena descripción general de las sesiones de Spring MVC y explica cómo / cuándo
@ModelAttribute
se transfieren los correos electrónicos a la sesión (si el controlador está@SessionAttributes
anotado).Ese artículo también explica que es mejor usarlo
@SessionAttributes
en el modelo en lugar de establecer atributos directamente en HttpSession porque eso ayuda a Spring MVC a ser independiente de la vista.fuente
SessionAttribute
La anotación es la más simple y directa en lugar de obtener la sesión del objeto de solicitud y el atributo de configuración. Cualquier objeto se puede agregar al modelo en el controlador y se almacenará en la sesión si su nombre coincide con el argumento en la@SessionAttributes
anotación. A continuación, por ejemplo,personObj
estará disponible en sesión.fuente
El siguiente código anotado establecería "valor" en "nombre"
Para acceder al mismo en JSP, use
${sessionScope.name}
.Para
@ModelAttribute
ver este enlacefuente
¿No es así más fácil y más corto ? Lo sabía y lo probé, funcionando perfectamente aquí:
ps . Vine aquí buscando una respuesta de " Cómo usar los atributos de sesión en Spring-mvc ", pero leí tantos sin ver lo más obvio que había escrito en mi código. No lo vi, así que pensé que estaba mal, pero no, no lo estaba. Entonces, compartamos ese conocimiento con la solución más fácil para la pregunta principal.
fuente
Prueba esto...
fuente
Cuando intenté iniciar sesión (que es un modal de arranque), utilicé la anotación @sessionattributes. Pero el problema fue cuando la vista es una redirección ("redirección: / home"), los valores que ingresé a la sesión se muestran en la URL. Algunas fuentes de Internet sugieren seguir http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#mvc-redirecting Pero usé HttpSession en su lugar. Esta sesión estará ahí hasta que cierre los navegadores. Aquí hay un código de muestra
No cambia algo específico en el lado de la vista.
Después de iniciar sesión, agregue los códigos anteriores a cualquier lugar de su sitio web. Si la sesión está configurada correctamente, verá los valores allí. Asegúrese de haber agregado correctamente las etiquetas jstl y las expresiones El- (aquí hay un enlace para configurar las etiquetas jstl https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project- correctamente / )
fuente
Utilice este método muy simple fácil de usar
en jsp una vez usar y luego eliminar
fuente
En Spring 4 Web MVC. Puede usar
@SessionAttribute
en el método con@SessionAttributes
nivel de controladorfuente