Pode ser incluído como string de consulta GET usando o includeViewParamsatributo de <h:link>ou o includeViewParams=trueparâmetro de solicitação em qualquer URL.
Pode ser usado em um @RequestScopedbean, mas requer que o bean o seja @ViewScopedse você quiser que os parâmetros de visualização sobrevivam a quaisquer falhas de validação causadas por formulários incluídos na visualização, caso contrário, você precisa reter manualmente todos os parâmetros de solicitação para as solicitações subsequentes <f:param>no comando componentes.
Exemplo :
<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"/>
Define o valor imediatamente após a construção do bean.
O valor definido está disponível durante o @PostConstructqual permite uma inicialização / pré-carregamento fácil de outras propriedades com base no valor definido.
Não permite conversão / validação declarativa em vista.
A propriedade gerenciada de #{param}não é permitida em beans com um escopo mais amplo do que o escopo de solicitação, portanto, o bean deve ser @RequestScoped.
Se você confiar que uma propriedade gerenciada estará #{param}presente nas solicitações POST subsequentes, será necessário incluí-la <f:param>nos UICommandcomponentes.
Exemplo :
@ManagedProperty("#{param.id}")privateLong id;privateUser user;@EJBprivateUserService userService;@PostConstructpublicvoid init(){
user = userService.find(id);}
Mas você mesmo precisa gerenciar a validação sempre que userestiver nullmexendo com FacesContext#addMessage()ou algo assim.
Você pode usar ambos quando @PostConstructe includeViewParamsforem obrigatórios. Você só não poderá mais aplicar conversão / validação de baixa granularidade.
Há outra alternativa para recuperar os parâmetros de solicitação em casos excepcionais: FacesContext.getCurrentInstance (). GetExternalContext (). GetRequestParameterMap (). Get ("parametername");
angelcervera de
1
@angel: Somente quando o bean tem um escopo mais amplo do que o escopo da solicitação, o que torna @ManagedPropertyum parâmetro de solicitação impossível.
BalusC de
oi @BalusC, confio no valor de id recuperado de param.id usando managedproperty em um segundo post. Como posso incluí-lo usando f: param? muito obrigado
sys_debug
1
@thufir: É definido durante a fase de atualização dos valores do modelo. O postconstruct é executado muito antes disso, diretamente após a construção do bean e a injeção de dependência. Ele está disponível no método listener que é invocado por <f:event type="preRenderView">ou no próximo JSF 2.2 <f:viewAction>.
@ManagedProperty
um parâmetro de solicitação impossível.<f:event type="preRenderView">
ou no próximo JSF 2.2<f:viewAction>
.2 outras diferenças:
@ManagedProperty
é utilizável apenas com beans gerenciados por JSF, não com beans gerenciados por CDI (@Named
);<f:viewParam>
funciona apenas com parâmetros de solicitações GET.fonte