2015-04-26 33 views
0

我試圖在調用我的Managed Bean操作後刪除其中一個元素。 這裏是我的JSF頁面的代碼:JSF <f:ajax>標記在提交後沒有呈現我的表單

<div class="container"> 
    <div class="starter-template"> 
     <h:form id="productslist"> 
      <div class="row"> 
       <ui:repeat value="#{listProductsManagedBean.products}" var="product"> 
        <div class="col-md-4"> 
         <h1> 
          <h:outputText id="outputname" value="#{product.name}"/> 
         </h1> 
         <p> 
          <h:outputText id="outputprice" value="#{product.price} #{product.currency}"/> 
         </p> 
         <p> 
          <h:commandLink class="btn btn-primary btn-lg" value="Delete" action="#{listProductsManagedBean.delete}"> 
           <f:ajax render="outputprice outputname"/> 
           <f:param name="id" value="#{product.id}" /> 
          </h:commandLink> 
         </p> 
        </div> 
       </ui:repeat> 
      </div> 
     </h:form> 
    </div> 
</div> 

這是正在調用我的託管bean行動:

public void delete(){ 
    ProductEntity product; 
    product = productEntityFacade.find(id); 
    productEntityFacade.remove(product); 
} 

我希望我的形式來呈現,而不是再次顯示已刪除的元素。

回答

0

已解決。我犯了一個愚蠢的錯誤。我沒有重新加載Managed Bean中的列表(填寫在@PostConstruct方法中),現在正在使用t:dataList標籤。

+0

是否按照問題中所述的方式工作(意思是:''),還是使用'render =「@ form」'? –

+0

沒有嘗試發佈在問題中。我會盡力。 – Verdi

0

這種方法不能從ui:repeat中刪除已刪除的元素。請嘗試render="@form"

此外,在f:ajax內使用execute="@this"是一種更好的做法。您無需提交整個表單進行刪除操作。

<h:commandLink class="btn btn-primary btn-lg" value="Delete" action="#{listProductsManagedBean.delete}"> 
    <f:ajax execute="@this" render="@form"/> 
    <f:param name="id" value="#{product.id}" /> 
</h:commandLink> 
+0

我不明白該怎麼做。我必須刪除commandLink標記嗎?我怎麼稱呼這個動作呢? – Verdi

+0

抱歉保持它太短,我更新了我的答案並添加了代碼。 –

+0

我已經試過這樣,它不工作。 – Verdi