2013-09-01 12 views
3

我有命令鏈接在黃金面數據表中可以通過動作打開一個對話框。點擊鏈接時總是調用postconstruct。對話框更新和打開調用postconstruct

我的要求是更新到對話框,並提供編輯所需的詳細信息。

部分的代碼片段:

<p:dataTable id="sampleMasterListDataTable" var="sampleEntry" 
    value="#{sampleMgmtBean.sampleMasterList}" paginator="true" rows="5" 
    paginatorAlwaysVisible="false" 
    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} 
    {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
    rowsPerPage="5" style="width:600px;"> 

    <p:column headerText="Invoice No"> 
     <h:outputText value="#{sampleEntry.invoiceNo}" /> 
    </p:column> 
    <p:column headerText="Sales Date"> 
     <h:outputText value="#{sampleEntry.date}"> 
      <f:convertDateTime pattern="dd-MM-yyyy" /> 
     </h:outputText> 
    </p:column> 

    <p:column headerText="Update"> 
     <p:commandButton id="editSalesLink" value="Edit" 
      action="#{sampleMgmtBean.pullSalesDetails(sampleEntry)}" 
      update=":tabView:editDialog" process="@this" ajax="true" 
      oncomplete="editSalesDialog.show();" /> 
    </p:column> 
</p:dataTable> 

的對話框代碼:

<p:dialog id="editDialog" header="Update Sales Dialog" 
     widgetVar="editSalesDialog" resizable="false" height="500" modal="true"> 
    <h:form id="sampleMasterEditForm" prependId="false"> 
     <p:panelGrid columns="8" cellpadding="5" style="width: 650px"> 
      <h:outputLabel for="editInvoiceNo" value="Invoice:" /> 
      <p:inputText value="#{sampleMgmtBean.sampleMaster.invoiceNo}" 
      id="editInvoiceNo" required="false" label="invoiceNo" /> 
     <h:outputLabel for="editSalesDate" value="Sales Date:" /> 
     <p:calendar id="editSalesDate" mode="popup" styleClass="calendar" 
      navigator="true" readonly="readonly" 
      value="#{sampleMgmtBean.sampleMaster.date}" yearRange="1900:2050" 
      pattern="dd/MM/yyyy HH:mm:ss"> 
     </p:calendar> 
    </p:panelGrid> 
    </h:form> 
</p:dialog> 

Java代碼

@ManagedBean(name="salesMgmtBean") 

@ViewScoped 

public class SalesMgmtBean implements Serializable { 

     @PostConstruct 
    public void init() { 
    //new objects 
    } 

} 

回答

0

您的按鈕具有導致一個新的觀點是一個行動渲染。這可能會導致您的視圖範圍的bean被重新實例化,因爲jsf可能會將您的操作結果解釋爲「新視圖」,從而導致舊視圖對話被刷新。由於bean只有視圖範圍,因此將會實例化一個新的視圖,導致PostContruct攔截器執行。

而不是調用按鈕中的動作,嘗試鏈接兩個ActionListeners(一個接一個)或一個綁定到控件,另一個作爲控件的子節點(f:actionListener)。這樣你不會得到一個視圖轉換(這是什麼動作導致)。

如果您從另一個bean中添加了足夠的肉來顯示操作方法的結果,那將會非常有用。