У меня проблемы с моим AJAX-событием, и мне было интересно, может ли кто-нибудь помочь мне определить, где я ошибаюсь.f: ajax Невозможно посмотреть мой разговор
У меня есть раскрывающийся список на моей странице, который, когда он изменяется, я хочу, чтобы он обновил еще одну часть этой страницы. Когда я использую страницу без длительной беседы, все работает нормально. Но как только я попытаюсь начать длинный разговор & попробуйте использовать раскрывающийся список, я получаю сообщение «WELD-000321 Не найдено ни одной беседы, чтобы восстановить ошибку id 1». Может ли кто-нибудь подумать о причине этого? Я уверен, что разговор был запущен и доступен для этой страницы. Это выполняется на Tomcat 6 и использует Mojarra 2.1.6, Weld 1.1.5 & PrimeFaces также присутствует (хотя и не участвует в этой части).
Я могу сказать, что ошибка возникает из-за ошибки в моем теге f: ajax. Это вызывает функцию JavaScript, которая выводит объект ошибки, который происходит. Отладка кода на начальном запросе страницы показывает, что разговор запущен, и часть кода, распечатывающего разговор (# {collectionHome.conversation}), возвращает мою беседу.
Последовательная версия моего кода следует.
Форма:
<ui:define name="metadata">
<f:metadata>
<f:event type="preRenderView" listener="#{collectionHome.init(true)}" />
</f:metadata>
</ui:define>
<ui:define name="content">
<h:form id="modalForm" class="modalForm">
<ul class="layout form">
<li>
<label for="type" class="required">Type:</label>
<h:selectOneMenu id="type" value="#{collectionHome.selectedCollectionType}">
<f:selectItems value="#{collectionHome.types}" var="colType" itemLabel="#{colType.displayName}" itemValue="#{colType}"/>
<f:ajax event="change" listener="#{collectionHome.switchType}" onerror="handleError" render="@form" />
</h:selectOneMenu>
<p:message id="typeMsg" for="type" />
</li>
<li>
<p>#{collectionHome.conversation}</p>
</li>
<h:panelGroup rendered="#{collectionHome.selectedCollectionType eq 'IMAGE'}">
<li>
<!-- Content to show/hide goes here -->
</li>
</h:panelGroup>
</ul>
</h:form>
</ui:define>
CollectionHome:
@Named("collectionHome")
public class CollectionHome extends EntityHome<FileCollection> implements Serializable {
private CollectionTypes selectedCollectionType;
public boolean doInit() {
return true;
}
public String switchType(AjaxBehaviorEvent event) {
switch (selectedCollectionType) {
case IMAGE:
setEntity(new ImageCollection(getEntity()));
break;
case DOCUMENT:
setEntity(new DocumentCollection(getEntity()));
break;
default:
break;
}
return OutcomeStrings.SUCCESS;
}
}
EntityHome:
@ConversationScoped
public abstract class EntityHome<T extends BaseEntity> {
@Inject
private Conversation conversation;
public void init(boolean startConversation) throws AuthenticationException {
if (doInit()) {
if (startConversation) {
beginConversation();
}
postInit();
}
}
}