Saludos, estoy aprendiendo con java especificamente hibernate + struts, revisando en internet encontre esta pagina http://blog.lshimokawa.net/2007/12/accediendo-al-request-o-la-sesin-con.html en la cual se hace referencia a que mediante DWR se puede acceder al request, especificamente a los metodos basados en la clase WebContext, sin embargo yo estoy probando lo siguiente:
1. tengo una clase tipo ActionForm la cual contiene 2 metodos (uno que carga o setea un atributo al request y otro que ejecuta la funcion de DWR):
public class alumnoAction extends ActionForm {
public ActionForward mostrar_alumnos( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
request.setAttribute("nombre", "edwuard quintero");
//imprimo el objeto request para saber de que tipo es:
System.out.println( "request->"+ request );
// la consola de java devuelve: org.apache.catalina.core.ApplicationHttpRequest@1f ba15d
// bien es el request de la aplicacion
//retorna el forward
return mapping.findForward("showPage");
}
}
el forward va a una pagina JSP la cual muestra la informacion:
ejemplo de la pagina JSP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Pagina de Prueba</title>
</head>
<body>
Hola: <% request.getAttribute("nombre"); %>
</body>
</html>
2. ahora bien, tengo configurado el DWR.XML asi:
<dwr>
<allow>
<create creator="new" javascript="jsDWR" >
<param name="class" value="com.app.struts.action.alumnoAction"/>
</create>
</allow>
</dwr>
este es el script en la pagina principal que llama a DWR:
<script type="text/javascript">
function update() {
var name = dwr.util.getValue("nombre");
jsDWR.cambiaNombre(name, function(data) {
dwr.util.setValue("nombre", data);
});
}
</script>
EL PROBLEMA! es que cuando se llama a la funcion de DWR "cambiaNombre()" me dice que el request y la session son NULL
public String cambiaNombre(String name) {
WebContext ctx = WebContextFactory.get();
HttpSession session = ctx.getHttpServletRequest().getSession(false);
HttpServletRequest req = ctx.getHttpServletRequest();
//intento recuperar el request y la session
System.out.println( "session->"+session ); //la consola de java devuelve: NULL
System.out.println( "request->"+req ); //la consola de java devuelve: org.apache.catalina.connector.RequestFacade@183bff 8
//aqui hacer lo que voy a hacer con el atribute del request ....
//devuelve a la pagina el mensaje
return "Hola, " + name;
}
-----------------------------------------------
NOTESE: que aqui el request es org.apache.catalina.connector.RequestFacade@183bff 8
mientras que anteriormente era de tipo org.apache.catalina.core.ApplicationHttpRequest@1f ba15d
porque sucede esto?
sera que WebContext no devuelve el objeto request original o que significa requestFacade?
Espero que me puedan ayudar, por favor...
Gracias.