0

I'am trying to pass a profile name for a webpage (xhtml) to the user bean validator. This is my approoach:

<f:event name="verifica" listener="#{RegistroBean.verificaUsuarioLogado}" type="preRenderView">            
        <f:attribute name="perfil" value="profesor"/>
    </f:event>

In the backing bean code, the event attributes are empty, but they shouldn't:

  public void verificaUsuarioLogado(ComponentSystemEvent event) {
        log.debug("URL " + UtilidadesBean.getRequestURL());
        log.debug("Verificando si está logado");
        if (event.getComponent().getAttributes().isEmpty()) {
            log.debug("No hay nada");
        } else {
            Iterator itr = event.getComponent().getAttributes().entrySet().iterator();
            while (itr.hasNext()) {
                Entry entrada = (Entry) itr.next();
                System.out.print("Clave " + (String) entrada.getKey() + " Valor " + (String) entrada.getValue());
            }
            String perfil = (String) event.getComponent().getAttributes().get("perfil");
            log.debug("Tengo el perfil de la página " + perfil);
        }
        String perfil = (String) event.getComponent().getAttributes().get("perfil");
        log.debug("Tengo el perfil de la página " + perfil);

Log output:

14-abr-2013 12:29:20 DEBUG beans.RegistroBean.verificaUsuarioLogado:231 - URL /spum/generainforme.xhtml
14-abr-2013 12:29:20 DEBUG beans.RegistroBean.verificaUsuarioLogado:232 - Verificando si está logado
14-abr-2013 12:29:20 DEBUG beans.RegistroBean.verificaUsuarioLogado:235 - No hay nada
14-abr-2013 12:29:20 DEBUG beans.RegistroBean.verificaUsuarioLogado:246 - Tengo el perfil de la página null

Ideas?

4

1 回答 1

1

<f:attribute>仅在UIComponent父级中受支持。<f:event>不是这样的。

要么移到<f:attribute>外面<f:event>

<f:event name="verifica" listener="#{RegistroBean.verificaUsuarioLogado}" type="preRenderView" />
<f:attribute name="perfil" value="profesor"/>

或者只是在 EL 中将其作为方法参数传递,这是自 Tomcat 7 支持的 EL 2.2 以来的新功能。

<f:event name="verifica" listener="#{RegistroBean.verificaUsuarioLogado('profesor')}" type="preRenderView" />

public void verificaUsuarioLogado(String perfil) {
    // ...
}

与具体问题无关,给定方法名称,您似乎想要执行一些身份验证检查。JSF 视图不适合这样做。另请参阅如何处理数据库中用户的身份验证/授权?

此外,托管 bean 名称必须以小写字母开头。就像你现在一样

RegistroBean RegistroBean = new RegistroBean();

这不符合标准Java 命名约定。只需省略namefrom 的属性@ManagedBean,它就会默认为正确的。

于 2013-04-14T11:04:13.770 回答