0

Managed Bean への Ajax 呼び出しの実装で多くの問題が発生しています。簡単なテスト ケースを用意しました。outputText の値が Beta に変更されることを期待していますが、Alpha のままです。私は何を間違っていますか?

package com.example.controllers;

import javax.faces.bean.ViewScoped;
import javax.inject.Named;

@Named(value = "tester")
@ViewScoped
public class tester{

    private String testString;

    /**
     * Creates a new instance of tester
     */
    public tester() {
        testString = "Alpha";
    }

    public String changeText(){

        testString = "Beta";
        return null;
    }

    /**
     * @return the testString
     */
    public String getTestString() {
        return testString;
    }

    /**
     * @param testString the testString to set
     */
    public void setTestString(String testString) {
        this.testString = testString;
    }
}


<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <h:commandButton value="Add Row" action="#{tester.changeText}">
                <f:ajax event="action" execute="@form" render="out"></f:ajax>
            </h:commandButton>
            <h:outputText id="out" value="#{tester.testString}"/>
        </h:form>
    </h:body>
</html>
4

1 に答える 1

1

CDI とマネージド Bean を混在させないでください。import javax.faces.bean.ViewScopedに変更import javax.faces.view.ViewScoped

UPDATE あなたのコメントから、あなたはJSF 2.2を持っていないようです(私の間違い)。あなたにとって最も簡単なことは、次のことです。

交換

import javax.inject.Named 

import javax.faces.bean.ManagedBean;

@Named(value = "tester")

@ManagedBean(name = "tester")

最後に、name上記の変更を行うときに値を指定する必要はありません。@ManagedBeanなしで使用nameすると、クラス名を使用して xhtml ページで Bean を参照できます。ただし、最初の文字は小文字になることに注意してください。

于 2013-07-01T00:07:28.463 に答える