내 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();
}
}
}