Event - JSF

4 respostas
D

Pessoal,

eu criei uma página xhtm onde tenho 3 botões. Um dos botões estará habilitado e os outros dois desabilitados. Quando o usuário pressionar o botão habilitado, a aplicação deve escolher aleatoriamente qual dos três botões estará habilitado da próxima vez e desabilitar os outros dois.

Para isso criei um managed bean para implementar o tratamento dos botões.

Mas está dando esta exceção:
javax.servlet.ServletException: /botoes.xhtml: Property ‘sorteiaBotao’ not found on type BotaoBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)

O que pode ser??? Não tenho ideia de como resolver.

4 Respostas

E

Velho, posta seu código do bean e parte do xhtml porque assim sem ver não tem jeito.

D

botoes.xhtml:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h=" http://java.sun.com/jsf/html"
    xmlns:f=" http://java.sun.com/jsf/core">

<h:head>
    <title>K19 - Eventos</title>
</h:head>

<h:body>
    <h:form>
        <h:commandButton id="botao-jonas" value="Jonas" disabled="false" actionListener="#{BotaoBean.sorteiaBotao}" />
        <h:commandButton id="botao-marcelo" value="Marcelo" disabled="true" actionListener="#{BotaoBean.sorteiaBotao}" />
        <h:commandButton id="botao-rafael" value="Rafael" disabled="true" actionListener="#{BotaoBean.sorteiaBotao}" />
    </h:form>
</h:body>
</html>

BotaoBean.java:

import javax.faces.bean.ManagedBean;
import javax.faces.component.*;
import javax.faces.event.ActionEvent;


@ManagedBean(name="BotaoBean")
public class BotaoBean {

    public void sorteiaBotao(ActionEvent event) {
        UIComponent formulario = event.getComponent().getParent();

        UIComponent botaoJonas = formulario.findComponent("botao-jonas");
        UIComponent botaoMarcelo = formulario.findComponent("botao-marcelo");
        UIComponent botaoRafael = formulario.findComponent("botao-rafael");

        botaoJonas.getAttributes().put("disabled",true);
        botaoMarcelo.getAttributes().put("disabled",true);
        botaoRafael.getAttributes().put("disabled",true);

        double numero = Math.random();

        if (numero<1.0/3.0) {
            botaoJonas.getAttributes().put("disabled",false);
        } else if (numero<2.0/3.0) {
            botaoMarcelo.getAttributes().put("disabled",false);
        } else {
            botaoRafael.getAttributes().put("disabled",false);
        }
    }    
}

A exceção:

javax.servlet.ServletException: /botoes.xhtml: Property 'sorteiaBotao' not found on type BotaoBean javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)

Alys

Nossa cara, esse foi osso de enxergar! Não é sarcasmo, custei a achar aqui o que era, de verdade.

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h=" http://java.sun.com/jsf/html" xmlns:f=" http://java.sun.com/jsf/core">

Na declaração do xmlns:h e do xmlns:f tem um espaço em branco no início. É só tirar que resolve.

D

Consegui, realmente eram essas bibliotecas e mesmo corrigindo ainda estava dando uma exceção. A exceção dizia que não reconhecia o método. Resolvi alterar de action para actionListener.

Então descobri que atributo action deve ser associado com métodos que representam uma aplicação de regra de negócio. Enquanto atributo actionListener deve ser associado com métodos que implementam uma lógica associada com a interface de utilizador.

Obrigada!!!

Criado 22 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 4
Participantes 3