0

当我点击页面中的 ap:commandButton 时出现此错误

java.lang.IllegalStateException:PWC3999:提交响应后无法创建会话

该按钮采用 h:form 格式,如下所示:

<p:commandButton value="Save" action="#{discussionManager.save}" ajax="false"/>  

但是 h:commandButton 可以正常工作:

<h:commandButton value="Save" action="#{discussionManager.save}"/>  (this works)

这是其中包含方法的 bean

@Named
@RequestScoped
public class DiscussionManager {

    private static final Logger logger = Logger.getLogger("DiscussionManager");

    @Inject
    private DiscussionDao discussionDao;

    private Discussion discussion = new Discussion();

    @Produces
    @Named
    @RequestScoped
    public Discussion getDiscussion() {
        return discussion;
    }

    public String save() {
        logger.info("Hello");
        discussionDao.create(discussion);
        return "list";
    }
}

我已经等了一整天才发布这个问题,因为我觉得我应该知道如何让它工作。但是我已经阅读并重新阅读了我的书以及许多其他帖子。我只是不明白为什么它不起作用。

4

3 回答 3

1

我怀疑这是因为 bean 超出了范围。当您关闭 ajax 时,它会提交表单,而您实际上正在处理一个新请求。尝试将您的范围扩展到视图范围。

于 2012-04-30T13:31:54.487 回答
1

不太确定我改变了什么来让它工作,因为现在整个事情工作正常。但为了完整起见,这是我页面的相关部分

                <h3>Write your message below</h3>
                <p:editor id="editor" 
                        value="#{discussion.message}" 
                        widgetVar="editor" 
                        width="600"
                        required="true"/>  

                <h:message for="editor"/>                                                

                <h:panelGrid columns="2" style="margin-top:10px">
                    <p:commandButton id="submitButton" value="Save" action="#{discussionManager.save}" ajax="false" icon="ui-icon-disk"/> 
                    <p:commandButton id="clearButton" type="button" value="Clear" onclick="editor.clear()" icon="ui-icon-close" />
                </h:panelGrid>    

这是我的豆子。希望有人觉得这很有用...

@Named
@RequestScoped
public class DiscussionManager implements Serializable {

    private static final Logger logger = Logger.getLogger("DiscussionManager");

    @Inject
    private DiscussionDao discussionDao;

    private Discussion discussion = new Discussion();

    @Produces
    @Named
    @RequestScoped
    public Discussion getDiscussion() {
        return discussion;
    }

    public String save() {
        logger.info("Hello");
        discussionDao.create(discussion);
        return "list";
    }
}
于 2012-04-30T21:05:59.767 回答
1

我无法评论您的最终答案,因此我必须添加另一个答案。我相信您为使示例正常工作所做的就是将 widgetVar 添加到您的编辑器组件中。我也有这个问题。在我添加 widgetVar 行之前,PrimeFaces Demo 上的示例无法正常工作。您需要在 onclick 调用中引用 widgetVar 名称而不是 id。为了清楚起见,我在 id 和 widgetVar 之间使用了不同的名称,因此我将您的编辑器代码更改为:

<h3>Write your message below</h3>
 <p:editor id="editorID" 
        value="#{discussion.message}" 
        widgetVar="editorWidget" 
        width="600"
         required="true"/>  

  <h:message for="editor"/>                                                

<h:panelGrid columns="2" style="margin-top:10px">
    <p:commandButton id="submitButton" value="Save" action="#{discussionManager.save}" ajax="false" icon="ui-icon-disk"/> 
    <p:commandButton id="clearButton" type="button" value="Clear" onclick="editorWidget.clear()" icon="ui-icon-close" />
</h:panelGrid>    

我希望这有助于澄清。

于 2012-05-01T13:11:29.813 回答