下午好,我有一个 web 应用程序,我想将数据返回到一个 jsp,但是当输入它时,它没有在屏幕上显示任何内容(空白屏幕)并且我收到以下错误:
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
最终它告诉我:
Caused by: javax.el.PropertyNotFoundException: Propiedad 'FecPrestacion' no hallada en el tipo java.lang.String.
谢谢
我这样编辑我不会比它更复杂
<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>
在我从请求中检索的第一个选项中给出了错误
这是我的类,它是一个模型,我从中转储我需要显示的数据,因此我不会在 JSP 中变得如此复杂,这些数据被添加到返回数据的 servlet 中。
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;
}
}
我添加了检索数据的 servlet 部分。
// 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;
}
它指示的错误是它
anestesia
的类型是String,一种没有任何属性或方法“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.