Servlet externo para búsquedas [Solucionado]

cancel
Showing results for 
Search instead for 
Did you mean: 
anusk_6671
Member II

Servlet externo para búsquedas [Solucionado]

Hola a todos!

Estoy intentando hacer un servlet para poder acceder a Alfresco mediante una URL determinada. La idea es que te redirija directamente a la página de resultados de la búsqueda.
En el servlet creo un UIComponent del tipo UISimpleSearch, un evento, y por último le añado el searchContext al evento.
Mi problema es que sólo funciona correctamente si el usuario se logea antes en Alfresco , y una vez logeado pone la URL en el navegador. En cambio si directamente pongo la URL sin haber iniciado sesión (y éste es el funcionamiento que necesito), Alfresco se dirije al espacio de Company Home en vez de mostrar los resultados de la búsqueda, y si vuelvo a cargar la página, me pone la cabecera de "Search Results" pero sigue mostrando en el dashlet de "browse spaces" los espacios dentro de Company Home.

El código dentro del Servlet para crear la búsqueda :

      // we almost always need this bean reference
      FacesContext fc = FacesHelper.getFacesContext(req, res, getServletContext());
      BrowseBean browseBean = (BrowseBean)FacesHelper.getManagedBean(fc, "BrowseBean");
   
      outcome=OUTCOME_BROWSE;

      //Creamos en UIComponent, el evento y llamamos al browseBean para …
       UISimpleSearch search = new UISimpleSearch();
       search.setId("search");
   
      //prueba para búsqueda del texto "index"
      SearchEvent sevent= new SearchEvent(search,"index",0);
      search.broadcast(sevent);    

     // método propio en el BrowseBean para asociar el searchContext con el evento
      browseBean.setSearchContext(sevent);

      fc.getApplication().getNavigationHandler().handleNavigation(fc, null, outcome);
      // perform the forward to the page processed by the Faces servlet
      String viewId = fc.getViewRoot().getViewId();
      getServletContext().getRequestDispatcher(FACES_SERVLET + viewId).forward(req, res);
     
  

Alguna idea de porqué sólo me funciona cuando el usuario se logea antes?
3 Replies
baskeyfield
Member II

Re: Servlet externo para búsquedas [Solucionado]

Buenas,

Si lo que vas a hacer son búsquedas desde una url externa, yo te recomiendo que uses opensearch.

Alfresco incorpora webscripts de opensearch para realizar consultas externas. La presentación de ese webscript es un .ftl que puedes personalizar.

Las urls son de este tipo:

http://<host>:<port>/alfresco/service/api/search/keyword?q={searchTerms}&p={startPage?}&c={count?}&l={language?}

Info en la wiki:

http://wiki.alfresco.com/wiki/OpenSearch

Saludos.
anusk_6671
Member II

Re: Servlet externo para búsquedas [Solucionado]

Gracias por la rápida respuesta Baskeyfield!

El problema es que tiene tiene que mostrar los resultados dentro del mismo Alfresco, es decir, mostrar el dashlet de "Search Results" para que el usuario tenga disponibles todas las acciones que se pueden realizar dentro de Alfresco (check-out,check-in, workflows etc…).
El webscript de opensearch sólo me devuelve los archivos encontrados relacionados con la búsqueda, y eso no es exactamente lo que necesito, por eso pensé en un servlet donde crear la búsqueda primero y que me entrara directamente a la página de resultados, pero cómo ya expliqué arriba poniendo directamente la url sin iniciar sesión no me funciona bien :cry:

Cómo sí que me funciona si antes el usuario inicia sesión, no se si será algun NavigationCase o algo así…
A ver si alguien me puede echar un cable!

Gracias de antemano

Ana



Edito: poniendo " browseBean.externalAccessRefresh();" en el servlet, cuando accedo por la url directamente a Alfresco me sigue yendo a CompanyHome, pero ahora al refrescar la página me muestra los resultados.. cómo hago para que vaya directamente?? Smiley Frustrated
anusk_6671
Member II

Re: Servlet externo para búsquedas [Solucionado]

Al final lo resolví.
El problema era que no estaba inicializado el UIlocation. Despues de poner la línea

browseBean.updateUILocation(nodeRef);
funcionó!

Muchas gracias,
Ana