2

これは私のコードです: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);
        }
    }    
}

実行すると、次の例外が発生します。

javax.servlet.ServletException:/botoes.xhtml:プロパティ'sorteiaBotao'がタイプBotaoBeanに見つかりませんjavax.faces.webapp.FacesServlet.service(FacesServlet.java:321)

解決方法がわかりません。チュートリアルの例と同じことをしました。誰か助けてもらえますか?

ありがとう!

4

1 に答える 1

4

例外は、actionListener="#{BotaoBean.sorteiaBotao}"がメソッド式ではなく値式として扱われることを示します(プロパティを探しているため、ゲッターから返された値を出力しようとしていますが、これは明らかにまったく存在しません。例外は次のように述べています。 )。

これは、コンポーネント全体と属性がJSFレンダラーによって認識されていないことを示しています。

これはh:、コンポーネントのタグライブラリが(適切に)宣言されていないことを示しています。

そして確かに、taglibURIにはぶら下がっているスペースがあります。

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

このスペースは、taglibURIには属していません。それに応じて修正します。

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

タグライブラリについても同じことを忘れないでくださいf:。URIのスペースも間違っています。

于 2012-08-22T20:03:37.350 に答える