struts - no se halla bean en ambito

estebanja
21 de Abril del 2006
Tengo una aplicación que usa struts e hibernate, y la corro en el tomcat. Hace dias que lucho contra esto.


Tiene una pàgina inicial (“home2.jsp”), que maneja un formulario (dni y nombre de persona). Se ingresa el dni y se hace click en un botón “Buscar”.
Al hacer click en ese botòn redirecciona, a travès de una acciòn, “FichaPersonal.jsp” pero muestra:

javax.servlet.ServletException: Cannot find bean: "PersonaBO" in any scope
org.apache.jasper.runtime.PageContextImpl.doHandle PageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePa geException(PageContextImpl.java:781)

.................


FichaPersonal.jsp

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<html>
<head>
<title>Encontrè una persona</title>
<td>El nombre es<bean:write name="PersonaBO" property="nombre"/></td>
</head>
</html>



Esta es la acciòn:

“SearchPersonAction3”

public class SearchPersonAction3 extends Action
{



public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
throws Exception
{

ActionForward forward = null;
IManejadorPersonas service = null;



try
{


Integer dni =((SearchPersonForm)form).getDniAccess();


service = new PersonsManager2();

PersonaBO personaBO;

personaBO = service.getPersona(dni);



HttpSession session = request.getSession(false);

if(session!=null)
session.invalidate();


session=request.getSession(true);


session.setAttribute("persona",personaBO);




forward = mapping.findForward("success");




}catch(Exception ex)
{

ex.printStackTrace();
throw DatastoreException.datastoreError(ex);


}

return forward;



}

}




config-struts.xml


<struts-config>
<form-beans>
<form-bean
name="SearchPersonForm"
type="SearchPersonForm"/>
</form-beans>
<action-mappings>
<action
path="/personas"
type="IAction"
name=""
scope="request"
validate="false">
<forward name="success" path="/home2.jsp" redirect="true"/>
</action>
<action
path="/BuscarPorDNI"
type="SearchPersonAction3"
name="SearchPersonForm"
scope="session"
validate="false">
<forward name="success" path="/FichaPersonal.jsp" redirect="true"/>
</action>
</action-mappings>
</struts-config>





“PersonsManager2.java”, (llamado por SearchPersonAction3)


public class PersonsManager2 implements IManejadorPersonas
{

SessionFactory sessionFactory = null;



public PersonsManager2()throws DatastoreException
{
init();

}




public PersonaBO getPersona(Integer id1)throws DatastoreException
{
PersonaBO personaBO = null;

Session session = null;

try
{
session = sessionFactory.openSession();

personaBO = (PersonaBO)session.get(PersonaBO.class,id1);

session.close();

}catch (Exception ex)
{
ex.printStackTrace();
throw DatastoreException.datastoreError(ex);
}

if (personaBO==null)
throw DatastoreException.objectNotFound();


return personaBO;


}

private void init()throws DatastoreException
{
try
{
sessionFactory=new Configuration().configure().buildSessionFactory();

}catch(Exception ex){
throw DatastoreException.datastoreError(ex);
}
}


}






Pila completa de errores:

javax.servlet.ServletException: Cannot find bean: "PersonaBO" in any scope
org.apache.jasper.runtime.PageContextImpl.doHandle PageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePa geException(PageContextImpl.java:781)
org.apache.jsp.FichaPersonal_jsp._jspService(org.a pache.jsp.FichaPersonal_jsp:77)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
causa raíz
javax.servlet.jsp.JspException: Cannot find bean: "PersonaBO" in any scope
org.apache.struts.taglib.TagUtils.lookup(TagUtils. java:934)
org.apache.struts.taglib.bean.WriteTag.doStartTag( WriteTag.java:225)
org.apache.jsp.FichaPersonal_jsp._jspx_meth_bean_w rite_0(org.apache.jsp.FichaPersonal_jsp:94)
org.apache.jsp.FichaPersonal_jsp._jspService(org.a pache.jsp.FichaPersonal_jsp:63)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)



La persona se busca exitosamente (a traves de PersonsManager2) pues ya lo he chequeado, pero tengo el problema de ambito

Saludos y gracias



nicokiki
21 de Abril del 2006
Hola!!!

Esto es tuyo:
'session.setAttribute("persona",personaBO);'
entonces estas poniendo como "clave" a "persona" y NO a "personaBO" => en el JSP el <bean:write deberia decir name="persona" !!!

Salu2!!!

estebanja
21 de Abril del 2006
Mil gracias. Anda. Saludos