Puede incluirse como una cadena de consulta GET mediante el includeViewParamsatributo <h:link>o el includeViewParams=trueparámetro de solicitud en cualquier URL.
Se puede usar en un @RequestScopedbean, pero requiere que el bean lo esté @ViewScopedsi desea que los parámetros de la vista sobrevivan a las fallas de validación causadas por los formularios incluidos en la vista; de lo contrario, debe retener manualmente todos los parámetros de solicitud para las solicitudes posteriores <f:param>en el comando componentes.
Ejemplo :
<f:metadata><f:viewParamid="user_id"name="id"value="#{bean.user}"required="true"requiredMessage="Invalid page access. Please use a link from within the system."converter="userConverter"converterMessage="Unknown user ID."/></f:metadata><h:messagefor="user_id"/>
Establece el valor inmediatamente después de la construcción del bean.
El valor establecido está disponible durante el @PostConstructcual permite una fácil inicialización / precarga de otras propiedades según el valor establecido.
No permite la conversión / validación declarativa a la vista.
La propiedad administrada de #{param}no está permitida en beans con un alcance más amplio que el alcance de la solicitud, por lo que el bean debe serlo @RequestScoped.
Si confía en una propiedad administrada de #{param}estar presente en las solicitudes POST posteriores, debe incluirla como <f:param>en los UICommandcomponentes.
Ejemplo :
@ManagedProperty("#{param.id}")privateLong id;privateUser user;@EJBprivateUserService userService;@PostConstructpublicvoid init(){
user = userService.find(id);}
Pero tienes que gestionar la validación tú mismo siempre userque nulljuegues con FacesContext#addMessage()algo o algo.
Usted puede utilizar los dos cuando ambos @PostConstructy includeViewParamsson obligatorios. Solo ya no podrá aplicar una conversión / validación detallada.
Existen otras alternativas para recuperar los parámetros de la solicitud en casos excepcionales: FacesContext.getCurrentInstance (). GetExternalContext (). GetRequestParameterMap (). Get ("parametername");
angelcervera
1
@angel: solo cuando el bean tiene un alcance más amplio que el alcance de la solicitud, lo que hace que @ManagedPropertyun parámetro de solicitud sea imposible.
BalusC
hola @BalusC Confío en el valor de id recuperado de param.id usando managedproperty en una segunda publicación. ¿Cómo puedo incluirlo usando f: param? muchas gracias
sys_debug
1
@thufir: se establece durante la fase de actualización de valores del modelo. La construcción posterior se ejecuta mucho antes de eso, directamente después de la construcción del bean y la inyección de dependencia. Está disponible en el método de escucha que es invocado por <f:event type="preRenderView">o el próximo JSF 2.2 <f:viewAction>.
@ManagedProperty
un parámetro de solicitud sea imposible.<f:event type="preRenderView">
o el próximo JSF 2.2<f:viewAction>
.2 otras diferencias:
@ManagedProperty
solo se puede usar con beans administrados por JSF, no con beans administrados por CDI (@Named
);<f:viewParam>
funciona solo con parámetros de solicitudes GET.fuente