JSF ActionListner/ActionEvent [RESOLVIDO]

Acho que você poderia usar commandLink, onde ma managedBean responde a pagina a ser carregada.


//JSF
<h:commandLink action="#{user.goLoginPage}" value="Login page + Param ">
	<f:param name="username" value="mkyong" />
</h:commandLink>

ou outputLink


<h:outputLink value="pagina2.xhtml">
	<h:graphicImage library="images" name="sofa.png" />
</h:outputLink>

[quote=Murilo_Ferreira]Acho que você poderia usar commandLink, onde ma managedBean responde a pagina a ser carregada.


//JSF
<h:commandLink action="#{user.goLoginPage}" value="Login page + Param ">
	<f:param name="username" value="mkyong" />
</h:commandLink>

ou outputLink

[code]

<h:outputLink value=“pagina2.xhtml”>
<h:graphicImage library=“images” name=“sofa.png” />
</h:outputLink>

[/code][/quote]

O commandLink eu sei que tenho que usar.
Mas como vou comparar o link que eu clico com o id da minha funcionalidade para saber qual página devo mandar?

entendi, mas não seria nem mais facil colocar o caminho da pagina absoluto pelo outputLink, sendo que o seu menu vai ser montado se forma dinamica ?

Caso queira insistir em usar o commandLink mesmo, faça o seguinte para acessar o id.


//JSF
&lt;h:commandLink action="#{mg.executeMenu}" value="Menu 1"&gt;
	&lt;f:param name="id" value="1234" /&gt;
&lt;/h:commandLink&gt;

public String executeMenu() {
 Integer id = Integer.valueOf(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
  if (id == 1234) return "pagina1234.jsf";

return null;
}

[quote=Murilo_Ferreira]Caso queira insistir em usar o commandLink mesmo, faça o seguinte para acessar o id.


//JSF
&lt;h:commandLink action="#{mg.executeMenu}" value="Menu 1"&gt;
	&lt;f:param name="id" value="1234" /&gt;
&lt;/h:commandLink&gt;

[code]

public String executeMenu() {
Integer id = Integer.valueOf(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“id”));
if (id == 1234) return “pagina1234.jsf”;

return null;
}

[/code][/quote]

Entendo,
O problema é que seu eu usar componente outputLink
Eu mato meu MVC.
Eu preciso ir no Controller.
Vou fazer os teste e coloco o resutado aqui.

Há quem se interessar.
O problema foi resolvido dessa maneira.
O meu Menu é dinâmico, por isso esse “trabalhinho”.
Se alguém tiver uma maneira mais elegante de fazer me fala. Claro sem matar meu MVC.
:wink:

<h:form>
		<h:dataTable value="#{sessionScope.usuario.perfil.funcionalidades}" var="item">
				<h:column>
					<f:facet name="header">
						<h:outputText value="Menu"/>
					</f:facet>
						<h:commandLink action="#{menuMB.navegar}" actionListener="#{menuMB.executaMenu}">
							<h:outputText value="#{item.nome}" />
							<f:attribute name="funcionalidade" value="#{item.id}"/>
						</h:commandLink>
				</h:column>	
		</h:dataTable>
	</h:form>
public String navegar(){	
		return resultado;
	}
public void executaMenu(ActionEvent event){

		this.funcionalidades = this.funciDAO.findAll(FuncionalidadeBean.class);
		int idFuncionalidade = (Integer) event.getComponent().getAttributes().get("funcionalidade");
		this.resultado = null;

		for (FuncionalidadeBean funcionalidade : this.funcionalidades) {
			if(funcionalidade.getId() == idFuncionalidade)
				this.resultado = getString(funcionalidade.getNome());
			
		}
	}


	 private String getString(String string){

		if(string.equals("Manter Usuários"))
			return "manterUsuarios";

		if(string.equals("Manter Atendentes"))
			return "manterAtendentes";

		return null;

	}

Só uma opinião, acho que deveria remover o metódo getString abaixo, que está muito impraticável.


private String getString(String string){  
  
        if(string.equals("Manter Usuários"))  
            return "manterUsuarios";  
  
        if(string.equals("Manter Atendentes"))  
            return "manterAtendentes";  
  
        return null;  
  
}

e criar um atributo “path” em FuncionalidadeBea, e deixar seu executeMenu da seguinte forma.


public void executaMenu(ActionEvent event){  
  
        this.funcionalidades = this.funciDAO.findAll(FuncionalidadeBean.class);  
        int idFuncionalidade = (Integer) event.getComponent().getAttributes().get("funcionalidade");  
        this.resultado = null;  
  
        for (FuncionalidadeBean funcionalidade : this.funcionalidades) {  
            if(funcionalidade.getId() == idFuncionalidade)  {
                this.resultado = funcionalidade.getPath();
             }
              
        }  
    } 

ME AJUDEM POR FAVOR ESTOU EM DUVIDA COMO FAZER ESSAS PERGUNTAS EM LINGUAGEM JAVA…

Faça um programa que leia um número e informe se o dobro do número é maior que 35.

  1. Faça um programa que leia um número e informe se a metade do número é menor que 12.

  2. Faça um programa que leia dois números e informe apenas se o primeiro é maior que o segundo.

  3. Faça um programa que leia dois números e informa se o primeiro é igual ao segundo.

  4. Faça um programa que leia dois números e informe se o primeiro é maior, menor ou igual ao segundo.

  5. Faça um programa que leia três números e informe qual dos três é o maior.

  6. Fazer um programa que receba um número e mostre se ele é positivo, negativo ou nulo (0).

[quote=Kratos men]ME AJUDEM POR FAVOR ESTOU EM DUVIDA COMO FAZER ESSAS PERGUNTAS EM LINGUAGEM JAVA…

Faça um programa que leia um número e informe se o dobro do número é maior que 35.

  1. Faça um programa que leia um número e informe se a metade do número é menor que 12.

  2. Faça um programa que leia dois números e informe apenas se o primeiro é maior que o segundo.

  3. Faça um programa que leia dois números e informa se o primeiro é igual ao segundo.

  4. Faça um programa que leia dois números e informe se o primeiro é maior, menor ou igual ao segundo.

  5. Faça um programa que leia três números e informe qual dos três é o maior.

  6. Fazer um programa que receba um número e mostre se ele é positivo, negativo ou nulo (0).

[/quote]

O ideal é que você criar um novo tópico especifico para isso, e começar os estudo em java.