Good afternoon, I have a web application and I want to return data to a jsp, but when entering it, it does not show anything on the screen (blank screen) and I get the following error:
GRAVE: El Servlet.service() para servlet jsp lanzó una excepción
javax.el.PropertyNotFoundException: Propiedad 'FecPrestacion' no hallada en el tipo java.lang.String
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:229)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:206)
at javax.el.BeanELResolver.property(BeanELResolver.java:317)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:85)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026)
at org.apache.jsp.menuAnestesista_jsp._jspx_meth_fmt_005fformatDate_005f0(menuAnestesista_jsp.java:421)
at org.apache.jsp.menuAnestesista_jsp._jspx_meth_c_005fforEach_005f0(menuAnestesista_jsp.java:326)
at org.apache.jsp.menuAnestesista_jsp._jspService(menuAnestesista_jsp.java:180)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at servlet.LoginUsr.cargaAnestesista(LoginUsr.java:128)
at servlet.LoginUsr.doPost(LoginUsr.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /menuAnestesista.jsp en línea 88
85: <c:forEach items="${requestScope.listadoAnestesia}" var="anestesia">
86: <tr>
87: <td>${i}</td>
88: <td><fmt:formatDate type="date" value = "${anestesia.FecPrestacion}" /></td>
89: <td><c:out value="${anestesia.fecARA}" default="---"></c:out></td>
90: <td><c:out value="${anestesia.fecRendicion}" default="---"></c:out></td>
91: <td><c:out value="${anestesia.afiliado()}"></c:out></td>
Stacktrace:
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at servlet.LoginUsr.cargaAnestesista(LoginUsr.java:128)
at servlet.LoginUsr.doPost(LoginUsr.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.el.PropertyNotFoundException: Propiedad 'FecPrestacion' no hallada en el tipo java.lang.String
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:229)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:206)
at javax.el.BeanELResolver.property(BeanELResolver.java:317)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:85)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026)
at org.apache.jsp.menuAnestesista_jsp._jspx_meth_fmt_005fformatDate_005f0(menuAnestesista_jsp.java:421)
at org.apache.jsp.menuAnestesista_jsp._jspx_meth_c_005fforEach_005f0(menuAnestesista_jsp.java:326)
at org.apache.jsp.menuAnestesista_jsp._jspService(menuAnestesista_jsp.java:180)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
... 35 more
Ultimately it tells me this:
Caused by: javax.el.PropertyNotFoundException: Propiedad 'FecPrestacion' no hallada en el tipo java.lang.String.
Thank you
I edit like this I don't complicate it more than it is
<c:forEach items="${requestScope.listadoAnestesia}" var="anestesia">
<tr>
<td>${i}</td>
<td><fmt:formatDate type="date" value = "${anestesia.FecPrestacion}" /></td>
<td><c:out value="${anestesia.fecARA}" default="---"></c:out></td>
<td><c:out value="${anestesia.fecRendicion}" default="---"></c:out></td>
<td><c:out value="${anestesia.afiliado()}"></c:out></td>
<td><c:out value="${anestesia.nroAfiliado()}"></c:out></td>
<td><c:out value="${anestesia.osocial()}"></c:out></td>
The error is given to me in the first option that I retrieve from the request
This is my class, it is a model from which I dump the data that I need to show so I don't get so complicated in the JSP, this data is added in the servlet that returns the data.
package entidades;
import java.io.Serializable;
import java.util.Date;
public class ModeloAnestesia implements Serializable{
/*
* VARIABLES
* ----------
*/
private static final long serialVersionUID = 1L;
private int idAnestesia, nroAfiliado, nroVias, nroTalon;
private String afiliado, edad, usuario, medico, anestesista, sanatorio, osocial, tpoAnestesia;
private Date fecPrestacion, fecARA, fecCarga, fecRendicion;
private boolean nocturno, feriado, fds;
/*
* CONSTRUCTORES
* -------------
*/
public ModeloAnestesia() {}
public ModeloAnestesia(int idAnestesia, Date fp, Date fa, Date fc, Date fr, String afiliado, int nroAfiliado,
boolean nocturno, boolean feriado, boolean fds, int nroVias, String edad, String usuario, String medico,
String anestesista, String sanatorio, String OS, String tpoAnestesia, int nroTalon){
this.idAnestesia = idAnestesia;
this.fecPrestacion = fp;
this.fecARA = fa;
this.fecCarga = fc;
this.fecRendicion = fr;
this.afiliado = afiliado;
this.nroAfiliado = nroAfiliado;
this.nocturno = nocturno;
this.feriado = feriado;
this.fds = fds;
this.nroVias = nroVias;
this.edad = edad;
this.usuario = usuario;
this.medico = medico;
this.anestesista = anestesista;
this.sanatorio = sanatorio;
this.osocial = OS;
this.tpoAnestesia = tpoAnestesia;
this.nroTalon = nroTalon;
}
/*
* METODOS
* -------
*/
public int getIdAnestesia() {
return idAnestesia;
}
public void setIdAnestesia(int idAnestesia) {
this.idAnestesia = idAnestesia;
}
public int getNroAfiliado() {
return nroAfiliado;
}
public void setNroAfiliado(int nroAfiliado) {
this.nroAfiliado = nroAfiliado;
}
public int getNroVias() {
return nroVias;
}
public void setNroVias(int nroVias) {
this.nroVias = nroVias;
}
public String getAfiliado() {
return afiliado;
}
public void setAfiliado(String afiliado) {
this.afiliado = afiliado;
}
public String getEdad() {
return edad;
}
public void setEdad(String edad) {
this.edad = edad;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getMedico() {
return medico;
}
public void setMedico(String medico) {
this.medico = medico;
}
public String getAnestesista() {
return anestesista;
}
public void setAnestesista(String anestesista) {
this.anestesista = anestesista;
}
public String getSanatorio() {
return sanatorio;
}
public void setSanatorio(String sanatorio) {
this.sanatorio = sanatorio;
}
public String getOsocial() {
return osocial;
}
public void setOsocial(String osocial) {
this.osocial = osocial;
}
public String getTpoAnestesia() {
return tpoAnestesia;
}
public void setTpoAnestesia(String tpoAnestesia) {
this.tpoAnestesia = tpoAnestesia;
}
public Date getFecPrestacion() {
return fecPrestacion;
}
public void setFecPrestacion(Date fecPrestacion) {
this.fecPrestacion = fecPrestacion;
}
public Date getFecARA() {
return fecARA;
}
public void setFecARA(Date fecARA) {
this.fecARA = fecARA;
}
public Date getFecCarga() {
return fecCarga;
}
public void setFecCarga(Date fecCarga) {
this.fecCarga = fecCarga;
}
public Date getFecRendicion() {
return fecRendicion;
}
public void setFecRendicion(Date fecRendicion) {
this.fecRendicion = fecRendicion;
}
public boolean isNocturno() {
return nocturno;
}
public void setNocturno(boolean nocturno) {
this.nocturno = nocturno;
}
public boolean isFeriado() {
return feriado;
}
public void setFeriado(boolean feriado) {
this.feriado = feriado;
}
public boolean isFds() {
return fds;
}
public void setFds(boolean fds) {
this.fds = fds;
}
public int getNroTalon(){
return nroTalon;
}
public void setNroTalon(int nroTalon){
this.nroTalon = nroTalon;
}
}
I add the part of the servlet that retrieves the data.
// Metodo que instancia los listados que necesito mostrar al principio y me deriva a la pagina correspondiente
private void cargaAnestesista(HttpServletRequest request, HttpServletResponse response){
try {
anestesias = cargarDatos(user);
HttpSession session = request.getSession(true);
request.setAttribute("anestesias", anestesias);
request.getRequestDispatcher("menuAnestesista.jsp").forward(request, response);
} catch (ServletException | IOException e) {
e.printStackTrace();
}
}
private ArrayList<ModeloAnestesia> cargarDatos(Usuario u){
//Instancio las variables que declare arriba
ctrlAnestesia = new CtrlAnestesia();
anestesista = new Anestesista();
ctrlAnestesista = new CtrlAnestesista();
ArrayList<Anestesia> listado = new ArrayList<>();
ArrayList<ModeloAnestesia> modelos = new ArrayList<>();
//Primero recupero los datos del anestesista
anestesista = ctrlAnestesista.buscarAnestesista(u.getUser());//tengo que ver si lo voy a necesitar??
/* Recupero los datos que voy a mostrar:
* - Obra Social
* - Medico
* - Sanatorio
* - TpoAnestesia
* El resto de los valores los paso de la anestesia directamente
*/
//Recupero las anestesias del anestesista activo.
try {
for(Anestesia a: ctrlAnestesia.listarAnestesia())
{
if(a.getUser() == u.getUser()){
listado.add(a);
}
}
} catch (ApplicationException e) {
e.printStackTrace();
}
//Recorro el listado de anestesias recuperados
if(!listado.isEmpty()){
for(Anestesia l:listado){
modelos.add(cargaModelo(l));
}
}
return modelos;
}
//Cargo la instancia del modelo que corresponde a la anestesia activa en el for de arriba
private ModeloAnestesia cargaModelo(Anestesia l){
modelo2 = new ModeloAnestesia();
modelo2.setIdAnestesia(l.getIdAnestesia());
modelo2.setFecPrestacion(l.getFecPrestacion());
modelo2.setFecARA(l.getFecAra());
modelo2.setFecRendicion(l.getFecRendicion());
modelo2.setAfiliado(l.getAfiliado());
modelo2.setNroAfiliado(l.getNroAfiliado());
modelo2.setOsocial(cargaOS(l.getIdOS()));//Ejecuto el metodo para devolver el dato
modelo2.setNocturno(cambiaTipo(l.getNocturno()));
modelo2.setFeriado(cambiaTipo(l.getFeriado()));
modelo2.setFds(cambiaTipo(l.getFds()));
modelo2.setNroVias(l.getNroVias());
modelo2.setEdad(l.getEdad());
modelo2.setNroTalon(l.getNroTalon());
modelo2.setMedico(cargaMedico(l.getIdMedico()));
modelo2.setSanatorio(cargaSanatorio(l.getIdSanatorio()));
modelo2.setTpoAnestesia(cargaTpoAnestesia(l.getIdTpoAnestesia()));
modelo2.setUsuario(l.getUser());
return modelo2;
}
The error that it is indicating is that it
anestesia
is of type String , a type that does not have any property or method "FecPrestacion
".Esto al parecer está ocurriendo porque tu
listadoAnestesia
no contiene una colección de tu modeloModeloAnestesia
sino de elementosstring
; el código que debes compartirnos es cómo generas esa lista.EDIT
Adicionalmente, viendo tu modelo resulta que no tienes ninguna propiedad
FecPrestacion
sino una variable privada llamadafecPrestacion
(con minúscula al principio, notación Camell). Esto es que, además de no existir esa propiedad, la que sí existe es privada por lo que nunca podrás acceder a ella desde fuera.Prueba a cambiar el código en la vista de manera que llames a los
getters
de tus propiedades, así:EDIT 2
De acuerdo con esta pregunta, lo único que debes hacer es eliminar el «
requestScope
» en la etiqueta para el forEach (e ignorar mi edit anterior):pero considera también que el atributo que estás definiendo en
cargaAnestesista
es "anestesias" y en el jsp iteras sobre "listadoAnestesia", debes usar el mismo nombre de atributo.