Измененная временная шкала простых лиц выполняется, но не вызывает метод для bean-компонента
Я пытаюсь добавить простые символы в существующий проект Spring/JSF (myfaces). У меня есть действующий компонент временной шкалы (или, по крайней мере, загрузка с правильными данными), но слушатели событий, похоже, не работают правильно. Я пробовал несколько конфигураций, но не могу решить эту проблему.
<p:timeline id="timeline1"
value="#{timelineView.getModel(searchFacade.dataModel)}"
editable="true" eventMargin="10" eventMarginAxis="0"
start="#{timelineView.start}"
end="#{timelineView.end}"
showNavigation="true" showButtonNew="true"
axisOnTop="true" stackEvents="false"
oncomplete="styleEvents();">
<p:ajax event="changed" listener="#{timelineView.onEdit()}" oncomplete="restyleTimeline()" />
</p:timeline>
В приведенном выше коде измененное событие инициируется и выполняется вызов AJAX. В сетевой панели браузера я вижу, что вызов AJAX всегда выполняется по URL текущей страницы (например, /mypage.jsf?conversationCode=a - я также, очевидно, использую Apache Orchestra)
Фактические данные формы, отправляемые для измененного события, выглядят так:
javax.faces.partial.ajax:true
javax.faces.source:timeline1
javax.faces.partial.execute:timeline1
javax.faces.behavior.event:changed
javax.faces.partial.event:changed
timeline1_eventIdx:0
timeline1_startDate:1498881600000
timeline1_endDate:1510894800000
timeline1_group:<div class='timeline-group'><div class='timeline-row timeline-row-group'>Group One/div><div class='timeline-row timeline-row-sub'>Group One subtitle</div><div class='timeline-row timeline-row-details'>Group One details</div></div>
mainForm:j_id_mt_SUBMIT:1
javax.faces.ViewState: Big hash as usual
Странно длинное имя группы, потому что я форматирую имена выходной группы в более подробный заголовок для строки между прочим.
Боб в спине (импорт и упаковка опущены):
public class TimelineView<T> implements Serializable {
private static final long serialVersionUID = 1L;
TimelineView<T> timelineView;
public TimelineModel getModel() {
return timelineView.getModel();
}
public TimelineModel getModel(ListDataModel<? extends Row<T>> results) {
return timelineView.getModel(results);
}
public void setTimelineView(TimelineView<T> timelineView) {
this.timelineView = timelineView;
}
public Date getStart() {
return timelineView.getStart();
}
public Date getEnd() {
return timelineView.getEnd();
}
public void onEdit(TimelineModificationEvent e) {
timelineView.onEdit(e);
}
public void onSelect(TimelineSelectEvent e) {
timelineView.onSelect(e);
}
}
Функциональность и код внутри этих методов не имеют значения, потому что, когда я устанавливаю точку останова, я вижу, что метод onEdit никогда не вызывается, и ни один из них не был методом onSelect, когда у меня было событие select на временной шкале.
Поскольку у меня есть Spring, обрабатывающий все bean-компоненты, моя конфигурация была именно такой, она находится в файле ApplicationContext.xml:
<bean id="timelineView" class="com.mycompany.projectone.view.timeline.TimelineView" />
Я попытался добавить форму вокруг временной шкалы, которая не имела никакого значения, а также попытался добавить process=":form_id", что вызвало ошибку "Не удается найти компонент для выражения":form_id"".
В качестве альтернативы, которая также отвечала бы моим потребностям, кто-нибудь знает, как отправлять события простых лиц в функцию javascript для обработки? Например, если пользователь перемещает начальную и конечную точки элемента на временной шкале, я хотел бы обновить отображаемые начальные и конечные даты.
Я также хотел бы изменить или перехватить поведение удаления и изменить то, что происходит при нажатии на ссылку удаления.
Любая помощь будет принята с благодарностью. Благодарю.
РЕДАКТИРОВАТЬ
Предлагаемый потенциальный дубликат не касается ни симптомов, ни фактического решения - см. Ответ ниже.
1 ответ
Итак, ответ оказывается, что Primfaces timeline
Компонент должен иметь виджет, установленный для того, чтобы p:ajax
а также pe:javascript
звонки на работу. Невероятно простое решение, но так невероятно трудно найти.