2012-10-17 73 views
1

我使用JSF創建應用程序。我遇到的問題是,每次刷新頁面時,都會執行commandbuton的動作(ProjectEntityHandlerBean.insertNewProject),導致數據庫中出現多個不需要的條目。我看了相關的線程,但沒有幫助我的情況:如何防止在頁面刷新時執行commandbutton中的操作?

How to avoid re-execution of last form submit action when the page is refreshed?

下面是.xhtml代碼,該代碼bean`s。如果有人能幫忙,我將不勝感激...

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> 

回答

1

如果你發佈數據,然後刷新頁面,瀏覽器將重新發送數據。有些人會首先發出警告。

阻止這種情況的一種方法是使用ajax進行發佈,但後來的導航是有限的。 Ajax可以由commandButton的一個簡單的<p:ajax process="@form" update="@form"/>孩子啓用,或者通過使用primefaces自己的命令按鈕<p:commandButton ajax="true" process="@form" update="@form"/>來啓用。

+0

你是什麼意思** **後有限的**導航? – TecHunter

0

在任何Web應用程序中解決此問題的一般方法是讓您的POST重定向到GET以顯示結果。然後可以刷新GET而不會影響數據庫。

1

對錶單始終使用Post-Redirect-Get模式。

相關問題