Problema com Mojarra 2.0.4 e PhaseListener
03/fevereiro/2011 - Java
Olá,
Esse post é apenas um lembrete meu, mas pode ajudar outras pessoas 😉
No Mojarra 2.0.4 (acredito que este problema venha desde da 2.0.0) quando você implementa seu javax.faces.event.PhaseListener no método beforePhase() o método FacesContext.getViewRoot() retorna null. Isto impossibilita a uma verificação que eu precisava fazer no código abaixo.
Para contornar o problema joguei o código para o método afterPhase(), pois lá o getViewRoot() não vem nulo.
Não sei se isso ocorre com outras implementações do JSF 2 como o MyFaces e nem sei se é proposital ou é se um bug.
public void beforePhase(PhaseEvent evt) { PhaseId phaseId = evt.getPhaseId(); FacesContext ctx = evt.getFacesContext(); String viewId = ctx.getViewRoot().getViewId(); if(PhaseId.RESTORE_VIEW.equals(phaseId)){ // Verificação simples de autorização de acesso // Caso usuario não estiver na sessão, redireciona para o login // Unica pagina livre é o que tem login na identificação da view HttpSession session = (HttpSession) ctx.getExternalContext().getSession(true); Object usuario = session.getAttribute(CrmGlobals.USUARIO_AUTENT); try { if(!(viewId.indexOf("login") > 0) && usuario == null){ FacesContext.getCurrentInstance().getExternalContext().redirect("/crm/login/login.jsf"); } } catch (IOException e) { e.printStackTrace(); } } }
Até mais,
Roberto
RichFaces – fileUpload component
16/novembro/2009 - Java
Olá
Para quem precisava de um componente de upload em JSF o RichFaces disponibiliza um ótimo. Tem suporte a seleção de multíplos arquivos para upload com a utilização de flash.
Clique aqui para experimentar a demonstração do componente.
Até mais,
Roberto
Versão final do JSF 2.0
19/outubro/2009 - Java
Olá!
O Gilliard Cordeiro publicou um post que me deixou felix 🙂
Mojarra (JSF RI) 2.0 disponível
No blog dele tem muitos exemplos usando JSF 2.0, vale a pena conferir.
Construindo menu dinamicamente com RichFaces
31/maio/2009 - Java
Olá Irei mostrar neste post como montar um menu usando código Java e não a taglib do Rich Faces. Normalmente fariamos assim:
<rich:dropDownMenu> <rich:menuItem submitMode="server" onclick="document.location.href='index.jsf'"> <h:outputText value="Blue Sky"/> <a4j:actionparam name="menu" value="blueSky" assignTo="#{MenuMB.skin}"/> </rich:menuItem> <rich:menuItem submitMode="server" onclick="document.location.href='index.jsf'"> <h:outputText value="Japan Cherry"/> <a4j:actionparam name="menu" value="japanCherry" assignTo="#{MenuMB.skin}"/> </rich:menuItem> <rich:menuItem submitMode="server" onclick="document.location.href='index.jsf'"> <h:outputText value="Deep Marine"/> <a4j:actionparam name="menu" value="deepMarine" assignTo="#{MenuMB.skin}"/> </rich:menuItem> </rich:dropDownMenu>
Para criar os itens do menu dinamicamente usando uma consulta no banco de dados por exemplo fariamos assim:
</code>public void atualizaGrupo(){ menuGrupos = new HtmlMenuGroup(); menuGrupos.setLabelClass("Menu de Skins"); List <Menu>novaLista = MenuDAO.getInstance().buscarMenus(); // for (Menu menu : novaLista) { HtmlMenuItem novoMenu = new HtmlMenuItem(); FacesContext context = FacesContext.getCurrentInstance(); ELContext elContext = context.getELContext(); Application app = context.getApplication(); ExpressionFactory expressionFactory = app.getExpressionFactory(); // MethodExpression me = expressionFactory.createMethodExpression( context.getELContext(), "#{MenuMB.exibirMenuSelecionado}", String.class, new Class[] {}); novoMenu.setActionExpression(me); novoMenu.setValue(menu.getDescricao()); // --------------------------- HtmlActionParameter htmlparam = new HtmlActionParameter(); ValueExpression valueExpression = expressionFactory.createValueExpression(elContext, "#{MenuMB.skin}", String.class); htmlparam.setAssignToBinding(valueExpression); htmlparam.setName("menuGrupo"); htmlparam.setValue(menu.getDescricao()); novoMenu.addActionListener(htmlparam); novoMenu.setOnclick("document.location.href='index.jsf'"); // // --------------------------------- novoMenu.getChildren().add(htmlparam); menuGrupos.getChildren().add(novoMenu); } }<code>
O método exibirMenuSelecionado() é usado apenas para exibir no console o valor do atributo skin.
public void exibirMenuSelecionado(){ System.out.println(" Valor de this.skin: "+ this.skin); }
No XHTML precisamos desse pequeno código.
<rich:menuGroup binding="#{MenuMB.menuGrupos}"></rich:menuGroup>
No managed bean é necessário colocar os atributos
private HtmlMenuGroup menuGrupos; private String skin;
Estou usando a versão 3.2.2.GA. Até mais, Roberto
Novidades no JSF 2.0
28/maio/2009 - Java
Olá!
A especificação do JSF 2.0 está em fase final e já exite uma implementação beta dessa especificação.
Abaixo links interessantes sobre o JSF 2.0.
Jim Driscoll’s Blog
URLs amigáveis no JSF 2.0
Espiando o JSF 2.0
Até mais,
Roberto