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

あなたの最終的な回答にコメントすることはできないので、別の回答を追加する必要があります。サンプルを機能させるためにあなたがしたことは、エディター コンポーネントに widgetVar を追加することだったと思います。私もこの問題を抱えていました。PrimeFaces Demo の例は、widgetVar 行を追加するまで正しく動作しません。ID ではなく、onclick 呼び出しで widgetVar 名を参照する必要があります。わかりやすくするために、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 に答える
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

Beanが範囲外になるためだと思います。ajax をオフにすると、フォームが送信され、実際に新しいリクエストが処理されます。スコープをビュー スコープに拡張してみてください。

于 2012-04-30T13:31:54.487 に答える