1

JSFを使用してアプリを作成しています。私が抱えている問題は、ページを更新するたびにコマンドボタンのアクションが実行され (ProjectEntityHandlerBean.insertNewProject)、データベースに複数の不要なエントリが作成されることです。関連するスレッドを調べましたが、私の場合は役に立ちませんでした:

ページが更新されたときに最後のフォーム送信アクションの再実行を回避するにはどうすればよいですか?

以下は、Bean のコードである .xhtml コードです。誰かが助けてくれれば、私は感謝します...

public String insertNewProject()
{   
    System.out.println("Enter insert method");
    Project project = new Project();
    project.setProjectName(this.projectName);
    project.setDescription(this.description);
    project.setDuration(this.duration);
    ProjectHandler ph = new ProjectHandler();
    ph.create(project);
    return "viewid?faces-redirect=true";


}

<p:tab title="Insert">
            <h:form style="height: 500px; ">
                Insert new Project
                    <h:panelGrid border="2" columns="2" style="height: 200px; width: 383px; ">
                        <h:outputText value="project name"></h:outputText>
                        <h:inputText value="#{ProjectEntityHandlerBean.projectName}"></h:inputText>
                        <h:outputText value="project description"></h:outputText>
                        <h:inputText value="#{ProjectEntityHandlerBean.description}"></h:inputText>
                        <h:outputText value="project duration (Months)"></h:outputText>
                        <h:inputText value="#{ProjectEntityHandlerBean.duration}"></h:inputText>
                    </h:panelGrid>
                    <h:commandButton value="Submit" action="#{ProjectEntityHandlerBean.insertNewProject}"></h:commandButton>
            </h:form>       
        </p:tab>
4

3 に答える 3

1

データを投稿してからページを更新すると、ブラウザはデータを再送信します。最初に警告する人もいます。

これを防ぐ 1 つの方法は、投稿に ajax を使用することですが、投稿後のナビゲーションが制限されます。Ajax は、commandButton の単純な<p:ajax process="@form" update="@form"/>子によって、または primefaces 独自の commandbutton を使用して有効にすることができます<p:commandButton ajax="true" process="@form" update="@form"/>

于 2012-10-17T15:13:14.923 に答える
1

フォームには常に Post-Redirect-Get パターンを使用してください。

于 2012-10-18T08:50:11.543 に答える
0

Web アプリケーションでこれを解決する一般的な方法は、POST を GET にリダイレクトして結果を表示することです。その後、データベースに影響を与えずに GET を更新できます。

于 2012-10-17T15:19:10.977 に答える