Error "No getter method" Struts

Jupe
22 de Junio del 2005
Hola a todos !
Acabo de empezar con struts eso lo primero, pero tengo un problema un tanto curioso.

Me he construido un Action, un Form y dos jsps uno de entrada y otro de destino, tb he configurado (creo correctamente el web.xml y el struts-config.xml).

Bueno Pues lo que me ocurre es lo siguiente al intentar cargar el jsp de inicio me da el siguiente error:

[6/04/05 13:07:15:199 CEST] 2e19a4ac WebGroup E SRVE0026E: [Error de servlet]-[No getter method for property sClaveEntidad of bean org.apache.struts.taglib.html.BEAN]: javax.servlet.jsp.JspException: No getter method for property sClaveEntidad of bean org.apache.struts.taglib.html.BEAN
at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:1050)
at org.apache.struts.taglib.html.BaseFieldTag.prepareValue(BaseFieldTag.java:121)
at org.apache.struts.taglib.html.BaseFieldTag.renderInputElement(BaseFieldTag.java:102)
at org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:81)
at org.apache.jsp._inicial._jspService(_inicial.java:151)
at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:344)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:662)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)

Que sepais que este mismo ejemplo que he realizado me ha funcionado con la version de struts 1.1 y con la 1.2.6 es con la que tengo el problema (por obligacion debo usar esta).
El entorno de desarrollo de todo esto ha sido "WebSphere Studio version 5.1.1)".

Adjunto el código del jsp de inicio por si alguien ve algo extraño pq el action y el form yo creo que estan correctos:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<html:html>

<HEAD>

<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META name="GENERATOR" content="IBM WebSphere Studio">

<TITLE>inicial.jsp</TITLE>
<html:base/>
</HEAD>

<BODY>

<html:form action="/lanzamientoAccion">

<TABLE border="0">
<TBODY>

<TR>
<TH>sClaveEntidad</TH>
<TD><html:text property="sClaveEntidad" /></TD>
</TR>

<TR>
<TH>sObservaciones</TH>
<TD><html:text property="sObservaciones" /></TD>
</TR>

<TR>
<TH>sUsuarioRol</TH>
<TD><html:text property="sUsuarioRol" /></TD>
</TR>

<TR>
<TH>sModelo</TH>
<TD><html:text property="sModelo" /></TD>
</TR>

<TR>
<TH>sTipoEntidad</TH>
<TD><html:text property="sTipoEntidad" /></TD>
</TR>

<TR>
<TH>sElementoACrear</TH>
<TD><html:text property="sElementoACrear" /></TD>
</TR>
<TR>
<TD><html:submit property="submit" value="Submit" /></TD>
<TD><html:reset /></TD>
</TR>
</TBODY>
</TABLE>
</html:form>
</BODY>
</html:html>


GRACIAS POR ADELANTADO y un saludo.

Agur
22 de Junio del 2005
Hola Jupe!
Yo no he trabajado nunca con WebSphere, pero conozco ese error. Para acceder a una propiedad, que deben ser private, hay que acceder mediante su método get y para darle valor con el set. Es decir, si tienes un Bean con una propiedad llamada sClaveEntidad debes crear (si no te lo crea ello automáticamente) un getSClaveEntidad que queda:

String getSClaveEntidad ()
{

return sClaveEntidad;
}

Espero que te sirva de ayuda

Un saludo

Jupe
22 de Junio del 2005
EL problema es que el WebSphere cuando creas el Form con sus atributos (que efectivamente son privados) tb crea todos los get y set de los mismos.
(ya te digo que me ha funcionado con la version anterior de struts no se si tendra algo que ver).

Envio el codigo del Form (generado por el websphere):

package com.iberdrola.actividades.presentation.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/**
* Form bean for a Struts application.
* Users may access 8 fields on this form:
* <ul>
* <li>sObservaciones - [your comment here]
* <li>sUsuarioRol - [your comment here]
* <li>sClaveEntidad - [your comment here]
* <li>sTipoEntidad - [your comment here]
* <li>sElementoACrear - [your comment here]
* <li>sModelo - [your comment here]
* <li>sElementoCreado - [your comment here]
* <li>sCodigoSingular - [your comment here]
* </ul>
* @version 1.0
* @author
*/
public class lanzamientoManualForm extends ActionForm {

private String sTipoEntidad = null;
private String sClaveEntidad = null;
private String sUsuarioRol = null;
private String sObservaciones = null;
private String sElementoACrear = null;
private String sModelo = null;
private String sElementoCreado = null;
private String sCodigoSingular = null;

/**
* Get sTipoEntidad
* @return String
*/
public String getSTipoEntidad() {
return sTipoEntidad;
}

/**
* Set sTipoEntidad
* @param <code>String</code>
*/
public void setSTipoEntidad(String s) {
this.sTipoEntidad = s;
}

/**
* Get sClaveEntidad
* @return String
*/
public String getSClaveEntidad() {
return sClaveEntidad;
}

/**
* Set sClaveEntidad
* @param <code>String</code>
*/
public void setSClaveEntidad(String s) {
this.sClaveEntidad = s;
}

/**
* Get sUsuarioRol
* @return String
*/
public String getSUsuarioRol() {
return sUsuarioRol;
}

/**
* Set sUsuarioRol
* @param <code>String</code>
*/
public void setSUsuarioRol(String s) {
this.sUsuarioRol = s;
}

/**
* Get sObservaciones
* @return String
*/
public String getSObservaciones() {
return sObservaciones;
}

/**
* Set sObservaciones
* @param <code>String</code>
*/
public void setSObservaciones(String s) {
this.sObservaciones = s;
}

/**
* Get sElementoACrear
* @return String
*/
public String getSElementoACrear() {
return sElementoACrear;
}

/**
* Set sElementoACrear
* @param <code>String</code>
*/
public void setSElementoACrear(String s) {
this.sElementoACrear = s;
}

/**
* Get sModelo
* @return String
*/
public String getSModelo() {
return sModelo;
}

/**
* Set sModelo
* @param <code>String</code>
*/
public void setSModelo(String s) {
this.sModelo = s;
}

/**
* Get sElementoCreado
* @return String
*/
public String getSElementoCreado() {
return sElementoCreado;
}

/**
* Set sElementoCreado
* @param <code>String</code>
*/
public void setSElementoCreado(String s) {
this.sElementoCreado = s;
}

/**
* Get sCodigoSingular
* @return String
*/
public String getSCodigoSingular() {
return sCodigoSingular;
}

/**
* Set sCodigoSingular
* @param <code>String</code>
*/
public void setSCodigoSingular(String s) {
this.sCodigoSingular = s;
}

public void reset(ActionMapping mapping, HttpServletRequest request) {

// Reset values are provided as samples only. Change as appropriate.

sTipoEntidad = null;
sClaveEntidad = null;
sUsuarioRol = null;
sObservaciones = null;
sElementoACrear = null;
sModelo = null;
sElementoCreado = null;
sCodigoSingular = null;

}

}

De todas maneras gracias,
Un Saludo Jupe.

Agur
22 de Junio del 2005
Hola Jupe!

lo siento, espero que pueda ayudarte otra persona, porque si tienes el getter y accedes a la propiedad por medio de él, no sé que puede pasar...

Suerte!!

Jupe
22 de Junio del 2005
La solución es la siguiente:

Todos los atributos del Form con minusculas.

nicokiki
22 de Junio del 2005
Hola!!!!!!!

Lo q decis de las minusculas/mayusculas no es correcto. No tiene q ser todo con minuscula. Lo q si es q es CASE-SENSITIVE y otra cosa para no tener problemas es q cuando pongas el <html:text/> le pongas el property y ademas el name (q esta en struts-config.xml)

Salu2!!!!!!!