0

我正在尝试在 JBoss AS 7 上和 JSF 2.0 应用程序中使用 CDI 的实现 Weld。

事实是,当我开始对话时,我的 @ConversationSconed @Named bean 似乎并没有保持他的状态。

为了看到这一点,我只是使用一个计数器,每次单击命令按钮时,我都会使用 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>

我究竟做错了什么 ?我是不是忘记了什么?

非常感谢您的回答!

4

1 回答 1

0

您是否尝试过使用标准的 h:commandButton 而不是 PrimeFaces 品种?如果 PrimeFaces 使用 AJAX(我记得是这样),您可能需要将对话 ID 作为参数发送。

于 2012-02-29T07:31:23.863 回答