Я не уверен, что вы имеете в виду под "значение не получается". Вы должны уточнить это немного больше.
По крайней мере, его единственная цель состоит в том, чтобы прослушивать изменение значения, чтобы вы могли выполнять некоторые деловые операции на основе этого изменения, такие как ведение журнала или предварительная загрузка некоторых материалов, связанных с новым значением. Когда начальное значение равно представленному значению, этот метод не будет вызываться.
Вот фрагмент кода, чтобы поиграть с ним самостоятельно:
<h:form>
<p>Input value: <h:inputText value="#{bean.value}" valueChangeListener="#{bean.change}"/></p>
<p>Old value: <h:outputText value="#{bean.oldValue}" /></p>
<p>New value: <h:outputText value="#{bean.newValue}" /></p>
<p><h:commandButton value="submit" action="#{bean.submit}" /></p>
</h:form>
Bean:
package com.example;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ValueChangeEvent;
@ManagedBean
@ViewScoped
public class Bean {
private String value;
private String oldValue;
private String newValue;
public void submit() {
System.out.println("Submit: " + value);
}
public void change(ValueChangeEvent event) {
oldValue = (String) event.getOldValue();
newValue = (String) event.getNewValue();
System.out.println("Change: " + oldValue + " to " + newValue);
}
public String getValue() {
return value;
}
public String getOldValue() {
return oldValue;
}
public String getNewValue() {
return newValue;
}
public void setValue(String value) {
this.value = value;
}
}
Обновление : согласно вашему обновлению: вы используете два разных экземпляра компонента. Вы на самом деле отображаете значения управляемого компонента, а не компонента, недавно созданного f:valueChangeListener
.