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
Share
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
Share

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. Site oficial do projeto.
Share
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
Share

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
Share