entiendo que esa cogiendo directamente el valor que esta en la variable "nombre" dentro de la clase empresa. es asi? tengo la duda porque "nombre" es private. alguien me puede comentar algo sobre ello?
entiendo que esa cogiendo directamente el valor que esta en la variable "nombre" dentro de la clase empresa. es asi? tengo la duda porque "nombre" es private. alguien me puede comentar algo sobre ello?
¡Hola Anthony! Gracias por tu pregunta. En efecto, la expresión "empresa.nombre" está accediendo directamente al valor de la variable "nombre" dentro de la clase "empresa". Sin embargo, como mencionas, si "nombre" está declarado como "private", entonces no debería ser accesible desde fuera de la clase.
La solución a esto es que la clase "empresa" debe tener un método público que permita acceder al valor de "nombre". Este método puede ser una función "getter" que devuelva el valor de "nombre". Por ejemplo:
public class Empresa {
private String nombre;
public String getNombre() {
return nombre;
}
}
De esta manera, desde fuera de la clase "empresa" se puede acceder al valor de "nombre" a través del método "getNombre()". Espero que esto te haya ayudado a aclarar tu duda. ¡Buenos estudios!
Tengo la misma duda, y entiendo la explicación, por ello es que se genera la duda, porque en los videos no usa el método getNombre(), sino usa empresa.nombre, lo cual no debería funcionar si el atributo esta en privado, pero de alguna forma que aun no entiendo funciona.
Hola,
También tuve la misma duda, lo que hice fue comentar el método getNombre()
en su declaración en la Clase Empresa y ver qué sucedía y efectivamente la página de "listaEmpresas" no cargó y la consola mostró Exception informando que no podía acceder al nombre.
También hice la prueba con scriplets he hice algunas modificaciones para hacer la prueba.
Aquí solo cambieempresa.getNombre()
por empresa
en la Clase NuevaEmpresaServlet:
RequestDispatcher rd = request.getRequestDispatcher("/nuevaEmpresaRegistrada.jsp");
request.setAttribute("llave", empresa);
rd.forward(request, response);
Esto lo hice con la intención de acceder al nombre de la empresa a través de scriptlets y expression language de la siguiente manera
Clase NuevaEmpresaRegistrada.jsp:
<%@page import="com.alura.gerenciador.servlet.Empresa"%>
<%
Empresa a = (Empresa)request.getAttribute("llave");
String nombreDeLaEmpresa = a.getNombre();
System.out.println(nombreDeLaEmpresa);
%>
<html>
<body>
Empresa <% out.println(nombreDeLaEmpresa); %> registrada!
<br>
Empresa <%= nombreDeLaEmpresa %> registrada!
<br>
Empresa ${llave.nombre} registrada!
</body>
</html>
Es decir que con Scriplets también se puede hacer pero se tendría que escribir más código, con Expression Language me parece que simplemente resume todo eso que hace el scriplet accediendo también a través de getNombre() como si lo hiciera internamente.
Encontré esto en inglés si a alguien le interesa, la explicación está justo después de la Introduccion, donde dice JavaBeans : https://stackoverflow.com/tags/el/info