5

私のアプリケーションには単純なフローがあります。1つのフォームに入力して[保存]を押すと(すべてがうまくいく場合)、リスト付きの2番目のビューにリダイレクトされます。ここで、「オブジェクトを正常に追加しました」というメッセージを追加したかったのですが、覚えているものからのリダイレクトを使用しているため、Flashスコープを使用する必要があります。そして、私はそうしました。問題は、最初の「保存」中に1つのメッセージしか正しく表示されないのに、フォームに戻って「保存」をクリックすると、現在のメッセージと古いメッセージが表示されることです。(3回目)フォームに戻って[保存]をクリックすると、メッセージが1つだけ表示されるのはさらに奇妙です(1-2-1-2-1-2など)。私は何か間違ったことをしていますか、それともjsfのバグですか?つまり、同じメソッドを呼び出して、異なる結果を取得しているということです...

私はprimefacesと最新のmojarrを使用しています:

jsf-api-2.1.1-b04
jsf-impl-2.1.1-b04
primefaces-2.2.1

コードは次のとおりです(少なくとも最も関連性の高い部分):

SaveForm.xhtml:

    <div id="content-box" class="content-box">
        <p:panel id="content-panel" header="Dane raportu"
            styleClass="content-panel">
            <div class="content-box">
                <h:form prependId="false">
                    <h:panelGrid id="grid" columns="2" styleClass="content-panel">

                        <!-- some inputs and labels -->

                        <p:commandButton value="#{msg['thesis.save.button']}"
                            action="#{thesisBean.saveThesis}" />    
                    </h:panelGrid>
                </h:form>
            </div>
        </p:panel>
    </div>

saveThesisメソッド:

public String saveThesis() {
            //this creates a Hibernate entity and saves it to the DB
    thesisService.addThesis(createThesisEntity());

    FacesContext context = FacesContext.getCurrentInstance();
    context.getExternalContext().getFlash().setKeepMessages(true);
    ResourceBundle bundle = context.getApplication().getResourceBundle(
            context, "msg");

    context.addMessage(null,
            new FacesMessage(FacesMessage.SEVERITY_INFO, "key1",
                    "key2"));


    return "list-theses.xhtml?faces-redirect=true";
}

list-theses.xhtml:

<ui:composition template="/basicTemplate.xhtml">

<ui:define name="content">

    <p:growl id="growl" showDetail="true" sticky="false" life="5000" />

    <div id="content-box" class="content-box">
        <h:form prependId="false" id="table-form">
            <p:dataTable var="thesis" value="#{thesisTableBean.theses}"
                paginator="true" rows="20">

                <p:column styleClass="table-name-column">
                    <f:facet name="header">
                        <h:outputText value="#{msg['thesis.table.name.header']}" />
                    </f:facet>
                    <h:outputText value="#{thesis.firstName} #{thesis.lastName}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        <h:outputText value="#{msg['thesis.table.title.header']}" />
                    </f:facet>
                    <h:outputText value="${thesis.title}" />
                </p:column>

                <p:column styleClass="table-number-column">
                    <f:facet name="header">
                        <h:outputText value="#{msg['thesis.table.number.header']}" />
                    </f:facet>
                    <h:outputText value="${thesis.number}" />
                </p:column>

            </p:dataTable>

        </h:form>

    </div>

</ui:define>

4

1 に答える 1

3

さて、私はここで「解決策」を見つけました:http: //ocpsoft.com/java/persist-and-pass-facesmessages-over-page-redirects/かなりうまくいくようです。それでも、コードが機能しない理由がわかりません。毎回同じ方法ですが、結果は異なります...

于 2011-05-03T14:12:08.623 に答える