2013-04-14 102 views
0

我試圖將網頁(xhtml)的配置文件名稱傳遞給用戶bean驗證器。這是我的approoach:JSF f:屬性到f:事件不映射在後臺bean中

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

在後臺bean的代碼,事件屬性是空的,但他們不應該:

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); 

日誌輸出:

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 

想法?

回答

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方法參數,這是因爲新的EL 2.2,其被Tomcat 7.

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

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

相依支持到具體的問題,給你的方法名稱,你似乎想要執行一些authenticat離子檢查。 JSF的觀點是錯誤的地方。另請參閱How to handle authentication/authorization with users in a database?

此外,託管bean名稱必須以小寫字母開頭。正如你現在有如

RegistroBean RegistroBean = new RegistroBean(); 

這是不符合標準Java naming conventions。只要省略@ManagedBeanname屬性,它就會將default指向正確的一個。

+0

你的建議解決了這個問題。關於身份驗證檢查,我的身份驗證與存儲在xml文件中的用戶/密碼/配置文件一起工作。我同意你關於這不是最好的地方,但它很容易發展和維護。我應該創建一個複雜的servlet過濾器不安全......你同意嗎? – minyatur