Si dovrebbe incollare qualche altro codice in modo che possiamo aiutarvi meglio. Da quello che dici non riesco a vedere dove hai chiamato il metodo per terminare la conversazione (ne hai bisogno anche quando lavori con lo scope della conversazione).
io incollare qui un piccolo esempio che penso vi aiuterà a capire come funziona la portata conversazione:
Questa è la pagina di avvio di una procedura guidata (ambito conversazione è grande per i maghi)
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>ConversationScoped demo CDI(Component Dependency
Injection)</title>
</h:head>
<h:body>
<h3>ConversationScoped demo CDI(Component Dependency Injection)</h3>
<p>A conversation scope provides persistence until a goal is
reached<br />
In this example the first entered value will remain until the end
method is called<br />
in some page.<br />
This is a really useful gadget, for making registration wizards and
similar tools...</p>
<h:form>
<h:outputText value="Type something" />
<h:inputText value="#{ supportBB.someValue}" />
<h:commandButton value="continue" action="#{ supportBB.onClick}" />
</h:form>
</h:body>
</html>
Questa è la seconda pagina della procedura guidata
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>ConversationScoped demo CDI(Component Dependency
Injection)</title>
</h:head>
<h:body>
<h3>This is the next page(The value is saved in the conversation)</h3>
<h4><h:outputText value="#{ supportBB.someValue}"/></h4>
<h:form>
<h:commandButton value="Finish conversation" action="#{ supportBB.onKeepGoing}"/>
</h:form>
</h:body>
</html>
E questa è la pagina in cui il campo di applicazione finisce
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>ConversationScoped demo CDI(Component Dependency
Injection)</title>
</h:head>
<h:body>
<h3>This is the last page.The value still saved in conversation(until the end() method is called)</h3>
<h4><h:outputText value="#{ supportBB.someValue}" /></h4>
<h:form>
<h:outputText
value="Click finish to end the conversation(So saved values are disposed)" />
<h:commandButton value="Finish" action="#{ supportBB.onFinish}" />
</h:form>
</h:body>
</html>
Qui il backing bean @ConversationScoped che inizia e termina la conversazione
package backingbeans;
import java.io.Serializable;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named()
@ConversationScoped()
public class SupportBB implements Serializable {
private static final long serialVersionUID = 1L;
private String someValue;
@Inject
private Conversation conversation;
// Control start and end of conversation
public void start() {
conversation.begin();
}
public void end() {
conversation.end();
}
// Navigation
public String onClick() {
if(someValue.equals("") || conversation == null) {
return "";//Dont go anywhere if the there was no input the field
}
start();
return "nextpage?faces-redirect=true";
}
public String onKeepGoing() {
return "finish?faces-redirect=true";
}
public String onFinish() {
end();// If triggered when there is no conversation(i.e URL Navigation)
// there will be an exception
return "index?faces-redirect=true";
}
// Getters & Setters
public String getSomeValue() {
return someValue;
}
public void setSomeValue(String someValue) {
this.someValue = someValue;
}
}
penso che questo esempio è molto semplice e può aiutarti a capire come funziona. Chiedi se non capite qualcosa
NOTA:
penso, ma non sono sicuro al 100%, ma ConversationScope funziona solo se la backing bean è un fagiolo CDI. Questo significato utilizza l'annotazione @Named. Meglio verificarlo.
Grazie per la risposta. Dovrò fare una prova quando torno sul mio altro computer stasera. Ho bisogno dei reindirizzamenti o posso semplicemente passare la pagina? – Adam
@Adam Fisher Puoi semplicemente passare la pagina ma mi piace sempre usare i reindirizzamenti, solo per essere sicuro :) – sfrj
Grazie per l'esempio dettagliato. Il mio problema stava usando @ManagedBean invece del @Named() con l'ambito. – Adam