Так что мне сложно понять область действия компонентов в JSF.Вот пример кода, над которым я работаю.У меня есть три отдельные панели, на первой панели у меня есть компонент календаря простых лиц.Primefaces имеет встроенный AJAX для компонента календаря, обратите внимание на «onSelectUpdate» и «selectListener».
В этом случае, когда выбран календарь, он запускает метод слушателя на InputBean и обновляет панель с помощьюid = "scores"
Внутри панели "Score" есть стандартная jsf (не простейшие) "selectOneListbox", так как нет встроенной поддержки AJAX для selectOneListbox, я вынужден использовать JSF <f:ajax>
тег внутри selectOneListbox, чтобы получить желаемое поведение.
То, что я хотел бы получить, - это когда счет выбирается из selectOneListbox, чтобы обновить третью панель.
При тестировании первой панели с компонентом календаря все работало простохорошо.Однако при тестировании второй панели я получаю эту ошибку: (имейте в виду, что компонент "j_idt24" - это selectOneListbox, на который я ссылаюсь)
<f:ajax> contains an unknown id 'scoreInfo' - cannot locate it in the context of the component j_idt24
Вот мой файл xhtml:
<?xml version='1.0' encoding='UTF-8'>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns="http://www.w3.org/1999/xhtml">
<p:panel style="position: relative">
<h:form>
<h:panelGrid columns="2" border="0">
Date: <p:calendar value="#{inputBean.scoresDate}" mode="popup" popupIconOnly"true" showOn="button" selectListener="#{inputBean.handleDateSelect}" onSelectUpdate="scores"/>
</h:panelGrid>
</h:form>
</p:panel>
<p:panel style="position: relative" id="scores">
<h:form>
<h:selectOneListbox value="#{inputBean.score}" size="10">
<f:ajax event="change" render="scoreInfo" listener="#{inputBean.handleScoreSelect}"/>
<f:selectItems value="#{inputBean.scores}" var="score" itemLabel="#{score.displayString}" itemValue="scoreId"/>
</h:selectOneListbox>
</h:form>
</p:panel>
<p:panel style="position: relative" id="scoreInfo">
<h:inputText value="#{inputBean.testString}"/>
</p:panel>
</ui:composition>
Для InputBean метод handleDateSelect просто получает список оценок из базы данных с учетом выбранной даты, а затем устанавливает в массив ArrayList с именем «scores» - все это прекрасно работает.
Всея делаю прямо сейчас, потому что метод handleScoreSelect изменяет значение testString, чтобы я мог видеть обновление AJAX, но сейчас он не может даже найти 3-ю панель.
Есть лиспециальный синтаксис, который я могу использовать, который я не смог найти в Google, такой, который может выделяться и считываться с уровня документа вместо уровня «selectOneListbox»?
Ваша помощь приветствуется.
Спасибо
PS - Я набрал код вручную с печатного листа бумаги, поэтому, если есть какие-либо опечатки - я приношу свои извинения.