我正在尝试将网页的配置文件名称(xhtml)传递给用户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
想法?
答案 0 :(得分: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视图是错误的。另请参阅How to handle authentication/authorization with users in a database?
此外,托管bean名称必须以小写开头。你现在就像是
RegistroBean RegistroBean = new RegistroBean();
不符合标准Java naming conventions。只需忽略name
中的@ManagedBean
属性,它就已经default到了正确属性。