我正在尝试在JBoss AS 7和JSF 2.0应用程序中使用CDI的实现Weld。
事实是,当我开始谈话时,我的@ConversationSconed @Named bean似乎没有保持他的状态。
在ordre看到,我只是使用一个计数器,每次我点击一个命令按钮,我使用Primefaces和ajax增加。
beans.xml存在于类路径中(META-INF,WEB-INF ...),我只想用@SessionScoped bean或@ManagedBean @ViewScoped来确定它,它运行得非常好!
但我更喜欢使用@ConversationScoped并使用@Named bean,而不是使用@ManagedBean。
也许我必须为JBoss AS 7或web.xml做另外的配置,我不知道......
这是我的@ConversationScoped bean:
@Named
@ConversationScoped
public class ConversationTest implements Serializable {
private int counter;
@Inject
private Conversation conversation;
public void startConversation() {
System.out.println(counter);
counter++;
if(conversation.isTransient())
conversation.begin();
}
public void stopConversation() {
if (!conversation.isTransient())
conversation.end();
}
public int getCounter() {
return counter;
}
public void setCounter(int counter) {
this.counter = counter;
}
}
以下是我的xhtml页面的内容:
<h:form prependId="false">
<h:panelGroup id="tests">
<h:outputText value="#{conversationTest.counter}" /> <br/>
<h:outputText value="Test : #{conversationTest.testHello}" /> <br/><br/>
</h:panelGroup>
<p:commandButton
value="Start !"
actionListener="#{conversationTest.startConversation}"
update="tests" />
<br/>
<p:commandButton
value="Stop !"
actionListener="#{conversationTest.stopConversation}"
update="tests" />
</h:form>
我做错了什么?我忘记了什么吗?
非常感谢您的回答!
答案 0 :(得分:0)
您是否尝试过使用标准的h:commandButton而不是PrimeFaces?如果PrimeFaces正在使用AJAX(我记得它是),你可能需要发送会话ID作为参数。