Я изучаю JSF и понимаю, как работает valueChangeListener. Я пытаюсь использовать его внутри dataTable. Цель использования valueChangeListener здесь: я хочу отслеживать изменения, которые пользователь выполняет в столбцах «Название» и «Имя».
Пожалуйста, найдите ниже код:
<p:dataTable var="tempVar"
value="#{tempView.tempVO}">
<p:column>
<h:outputLabel value="Academic Title:" />
<p:inputText value="#{tempVar.title}"
style="margin-left:10px;margin-top:20px;width:140px;height:25px"
valueChangeListener="#{tempView.titleChangeListener}">
<f:attribute name="TITLE" value="TITLE" />
</p:inputText>
<br />
<h:outputLabel value="First Name:" />
<p:inputText value="#{tempVar.firstName}"
style="margin-left:35px;margin-top:20px;width:140px;height:25px"
valueChangeListener="#{tempView.firstNameChangeListener}">
<f:attribute name="FIRST_NAME"
value="FIRST_NAME" />
</p:inputText>
<p:column>
</p:dataTable>
Бин-код
@PostConstruct
public void init() {
try {
tempVO = tempService
.fetchDataFromDatabase(tmpDataBean
.tempId());
System.out.println("success");
} catch (Exception e) {
e.printStackTrace();
}
}
public void titleChangeListener(ValueChangeEvent event) {
String title = (String) ((UIInput) event.getSource()).getAttributes()
.get("TITLE");
System.out.println(title);
}
public void firstNameChangeListener(ValueChangeEvent event) {
String firstName = (String) ((UIInput) event.getSource())
.getAttributes().get("FIRST_NAME");
System.out.println(firstName);
}
Проблема, с которой я сталкиваюсь, заключается в том, что valueChangeListener вызывается для всех столбцов базы данных. Например, если я меняю только заголовок, он также вызывает имя valueChangeListener. В ответе, предоставленном @BaluC по этим ссылкам, говорится, что его следует вызывать только при изменении значения. [Когда использовать valueChangeListener или прослушиватель f:ajax?
[1]: Когда использовать прослушиватель valueChangeListener или прослушиватель f:ajax? Может ли кто-нибудь помочь понять, как работает valueChangeListener, я использую его неправильно? Спасибо.