Cambiare inputText valore dal metodo listener

Ho un inputText:

<h:inputText id="result" value="#{guessNumber.result}"/>

e un altro inputText:

<h:inputText id="name" value="#{guessNumber.named}" onchange="submit()" valueChangeListener="#{guessNumber.processValueChange}"/>

e all’interno del processValueChange metodo, ho aggiunto la seguente riga:

result = "hello";

ma il valore visualizzato di “risultato” inputText rimane unchainged, qual è il problema?

OriginaleL’autore Osama Salah | 2012-09-28

2 risposte

  1. 10

    Il valueChangeListener metodo non è pensato per apportare modifiche al modello in questo modo. È da intendersi per ascoltare l’effettivo cambiamento del modello di valore, proprio nel momento in cui si ha una mano di sia il vecchio e il nuovo modello di valore. Per esempio, per effettuare qualche registrazione. Esso viene eseguito alla fine del convalide fase prima il modello di aggiornamento dei valori di fase. In modo che le modifiche che si fanno per i valori del modello di te all’interno del metodo listener vorresti essere ignorata durante l’aggiornamento del modello i valori di fase.

    Avete bisogno di un <f:ajax listener> invece. Questo viene eseguito durante la invocare la fase di azione, che è dopo il modello di aggiornamento dei valori di fase.

    <h:outputText id="result" value="#{guessNumber.result}" />
    <h:inputText id="name" value="#{guessNumber.named}">
        <f:ajax listener="#{guessNumber.namedChanged}" render="result" />
    </h:inputText>

    (nota che ho rimosso la onchange="submit()" gestore JavaScript!)

    con

    public void namedChanged(AjaxBehaviorEvent event) {
        result = "Hello, you entered " + named;
    }

    (l’argomento è opzionale; se non è necessario, basta omettere)

    Vedere anche:

    Ciao BalusC, ho provato il tuo suggerimento ma non funziona ancora, non accade nulla quando “nome” inputText perde la messa a fuoco, l’unica riga inserita all’interno namedChanged metodo è: risultato = “ciao”;
    Questo dovrebbe essere accettato risposta. Vincolante è una specie di difficile e potrebbe entrare in difficoltà.

    OriginaleL’autore BalusC

  2. 1

    Ho trovato la soluzione:
    Invece di legare il valore attributo di inputText di una proprietà di Stringa (risultato) all’interno del chicco, ho legato inputText per UIInput di proprietà all’interno del chicco:

    <h:inputText id="result" binding="#{guessNumber.result}"/>

    e la fava:

    private UIInput result = null;

    questo permette all’ascoltatore di metodo modificare inputText valore direttamente, invece di modificare la struttura a cui è associato il valore attributo di inputText:

    result.setValue("Hello");

    Grazie per ogni uno è cercato di risolvere il mio problema.

    OriginaleL’autore Osama Salah

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *