2012-10-05 163 views
8

Hoy estoy usando un servlet para recibir una POST de una página HTML y luego redireccionar a mi página JSF.JSF para recibir los parámetros POST

Ésta es mi servlet real:

public class CommInServlet extends HttpServlet { 

    private String reportKey; 

     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     req.getSession(true).setAttribute("reportKey", req.getParameter("reportkey")); 
     req.getRequestDispatcher("main.xhtml").forward(req, resp); 
     } 

    } 

página HTML mensaje:

<html> 
<head /> 
<body> 
<form action="Filtro" method="post"> 
<input type="text" size="120" name="reportkey" value="XXXXXXXXXXXX" /> 
<input type="submit" value="doPost" /> 
</form> 
</body> 
</html> 

¿Es posible enviar directamente a mi página JSF (ManagedBean)? ¿Cómo? Quiero reemplazar el Servlet por algo ... mejor.

Respuesta

18

Seguro que puedes. La mayoría de las solicitudes JSF son POST s de todos modos, por lo que si utiliza la ruta a la página JSF tiene la intención de manejar la solicitud POST, puede obtener el parámetro dentro de un bean administrado respaldado por esa página O BIEN obtener el parámetro dentro del la página en sí

Dentro de un bean gestionado:

 @PostConstruct 
     public void initMyBean(){ 
     /**This map contains all the params you submitted from the html form */ 
     Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
     requestParams.get("reportKey"); 
         } 

O dentro del bean gestionado tienen

 @ManagedProperty(value="#{param.reportKey}") 
    String reportKey; 
    //getter and setter of course! 

El método que ha anotado con @PostConstruct se ejecutará después de que el bean gestionado ha creado una instancia . Lo anterior le dará acceso dentro de su bean administrado.

Si se necesita el valor dentro de su página en primer lugar, sin embargo, puede tener esto en su página (preferiblemente en la parte superior)

 <f:metadata> 
     <f:viewParam name="reportKey" value="#{backingBean.reportKey}" required="true"/> 
    </f:metadata> 

Aviso cómo se puede realizar validaciones en el parámetro desde su punto de vista. Genial característica.

Solo asegúrese de configurar su html formulario action en la ruta de la vista JSF.

+0

En un viewParam, ¿qué significa required = "true"? – Erick

+0

@Erick 'required =" true "' asegura que el parámetro proporcionado no es nulo – kolossus

Cuestiones relacionadas