2010-07-28 16 views
9

tengo que tener este enlace:parámetro en jsf2 URL

http://myserver:/myproject/innerpage/clip.jsf&id=9099

para extraer el ID de un código como el siguiente:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
String clipId = request.getParameter("id"); 

Cuando lo ejecuto en Tomcat me sale:

mensaje /OnAir/innerpage/clip.jsf & id = 9099

descripción El recurso solicitado (/OnAir/innerpage/clip.jsf & id = 9099) no está disponible.

Cuando lo ejecuto sin & id = 9099 se ejecuta correctamente.

¿Cómo puedo hacer que funcione?

Respuesta

24

El carácter separador entre la ruta y la cadena de consulta en la URL es ?, no &. El & es un carácter separador para múltiples parámetros en la cadena de consulta, p. name1=value1&name2=value2&name3=value3. Si omite el ?, la cadena de consulta se verá como parte de la ruta en la URL, lo que dará lugar a un error de página/recurso HTTP 404 no encontrado.

Por lo tanto, este enlace debería funcionar http://myserver:port/myproject/innerpage/clip.jsf?id=9099


Dicho esto, hay una mucho mejor manera de acceder al parámetro de la petición. Establézcalo como una propiedad administrada con un valor de #{param.id}.

public class Bean { 

    @ManagedProperty(value="#{param.id}") 
    private Long id; 

    @PostConstruct 
    public void init() { 
     System.out.println(id); // 9099 as in your example. 
    } 

    // ... 
} 

Los EL #{param.id} le devuelve el valor de request.getParameter("id").

Un consejo: siempre que necesite transportar la API de Servlet "en bruto" desde debajo de las cubiertas JSF dentro de un bean administrado, siempre pregúntese (o aquí en SO): "¿No hay una forma JSF-ish?" . Gran posibilidad de que sea innecesariamente demasiado complicado;)

+0

gracias. Fui idiota – Dejell

+8

De nada. No, solo tienes que empezar en algún lado. Cometí el mismo error hace más de 10 años. Aprende de tus errores. Recuérdelos siempre que encuentre los mismos síntomas de problema nuevamente. Las lecciones aprendidas son valiosas para el futuro. – BalusC

+0

En realidad, no funcionaría para mí. El alcance de mi bean es view y recibo la desagradable excepción: El alcance del objeto al que hace referencia la expresión # {param.id}, solicitud, es más corto que el alcance de vista de los beans gestionados referidos (clipBean) – Dejell

3

Primero tiene que mostrarnos cómo está enviando el parámetro en su JSF, ¿es un CommandButton/Link? ¿Un enlace de salida? UN ? ¿También estás usando redirect = true?

Lo más probable es que esté perdiendo la identificación en algún lugar durante la solicitud.

Cuestiones relacionadas