我在primefaces数据表中有命令链接,可以通过操作打开对话框。点击链接时总是调用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 :(得分:0)
您的按钮有一个动作,可以渲染新视图。这可能导致您的视图范围bean被重新实例化,因为jsf可能将您的操作结果解释为“新视图”,从而导致旧视图对话被刷新。由于bean只有视图范围,因此将实例化一个新的视图,从而导致PostContruct拦截器执行。
而不是在按钮中调用一个动作,尝试链接两个ActionListener(一个接一个)或一个绑定到控件,一个作为控件的子(f:actionListener)。这样你就不会得到一个视图转换(这是行为导致的)。
如果您从其他bean中添加足够的肉来显示操作方法的结果,那将会非常有用。