Java 我无法执行我的工作事件-JSF-exception say Property';Sortieriabotao';在类型BotaoBean上找不到

Java 我无法执行我的工作事件-JSF-exception say Property';Sortieriabotao';在类型BotaoBean上找不到,java,events,jsf,Java,Events,Jsf,这是我的代码: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"

这是我的代码: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>

K19-事件
和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);
        }
    }    
}
导入javax.faces.bean.ManagedBean;
导入javax.faces.component.*;
导入javax.faces.event.ActionEvent;
@ManagedBean(name=“BotaoBean”)
公共类BotaoBean{
公共活动(行动事件){
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(“禁用”,true);
botaoMarcelo.getAttributes().put(“禁用”,true);
botaoRafael.getAttributes().put(“disabled”,true);
double numero=数学随机();

如果(numero异常表明
actionListener=“#{BotaoBean.sorteiaBotao}”
被视为一个值表达式,而不是一个方法表达式(它正在寻找一个属性,因此它试图只打印getter返回的值,而getter显然根本不存在;正如异常所说的那样)

这反过来表明JSF渲染器无法识别整个组件和属性

这反过来表明组件的
h:
标记库未(正确)声明

事实上,在标记库URI中有一个悬空的空间:

xmlns:h=" http://java.sun.com/jsf/html"
此空间不属于taglib URI中的位置。请相应地修复它:

xmlns:h="http://java.sun.com/jsf/html"

不要忘记对标签库执行同样的操作。
标签库的URI中也有一个放错位置的空格。

异常表明
actionListener=“#{BotaoBean.sorteiaBotao}”
被视为一个值表达式,而不是一个方法表达式(它正在寻找一个属性,因此它试图只打印getter返回的值,而getter显然根本不存在;正如异常所说的)

这反过来表明JSF渲染器无法识别整个组件和属性

这反过来表明组件的
h:
标记库未(正确)声明

事实上,在标记库URI中有一个悬空的空间:

xmlns:h=" http://java.sun.com/jsf/html"
此空间不属于taglib URI中的位置。请相应地修复它:

xmlns:h="http://java.sun.com/jsf/html"

不要忘了对标记库做同样的处理,它的URI中也有一个错误的空格。

我理解异常的原因,您解释得很好,但不清楚该怎么做。如何声明标记h?您编写的两个XMLN不相等?抱歉,但我很快就会使用JSF。谢谢!仔细查看标记库URI(引号中的值)。您已经在URI前面的“http”部分前面放置了一个空格。您应该删除这个空格。更正XMLN后,移到异常:javax.servlet.ServletException:javax.el.MethodNotFoundException:/botoes.xhtml@15105 action=“#{botaoBean.Sortiabotao}”:找不到方法:BotaoBean@10d4437.sorteiaBotao()javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)正确的方法是调用nameBean.nameMethod,不是吗?我这样做:actionListener=“#{BotaoBean.SortieBaTo}”更好的是,您取得了进步!但是,出于某种原因,您将
actionListener
更改为
action
,因此您应该删除
ActionEvent
参数。另请注意,Java是区分大小写的;
{BotaoBean}
{BotaoBean}不同
。虽然后者是正确的命名约定,但前者不是。我理解出现异常的原因,您解释得很好,但不清楚该怎么做。如何声明标记h?您编写的两个XMLN不相等?抱歉,但我很快就会使用JSF。谢谢!仔细查看标记库URI(引号内的值)。您已经在URI前面的“http”部分前面放置了一个空格。您应该删除此空格。更正XMLN后,移到异常:javax.servlet.ServletException:javax.el.MethodNotFoundException:/botoes.xhtml@15105 action=“#{botaoBean.sortiabotao}”:找不到方法:BotaoBean@10d4437.sorteiaBotao()javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)正确的方法是调用nameBean.nameMethod,不是吗?我这样做:actionListener=“#{BotaoBean.SortieBaTo}”更好的是,您取得了进步!但是,出于某种原因,您将
actionListener
更改为
action
,因此您应该删除
ActionEvent
参数。另请注意,Java是区分大小写的;
{BotaoBean}
{BotaoBean}不同
。虽然后者是正确的命名约定,但前者不是。