我有2个对话框。对话框(列表)和对话框(创建)。在对话框列表中,我有一个<p:dataTable/>
,其中包含插入Dialog(create)的值。
对话框列表,打开Dialog创建以插入值。
我想要的是在对话框(创建)中的插入值自动对话框(列表)刷新并插入值。
正在寻找解决方案,我发现任何使用update
的{{1}}和ajax的primefaces的建议。我正在尝试这个但仍然没有成功。
在对话框(创建)中插入值后,如何更新对话框(列表)?
这是我的尝试方式。
对话(列表)
<p:commandButton/>
对话(创建)
<p:dialog header="Turmas" id="TurmaViewDlg" widgetVar="TurmaViewDialog" appendTo="@(body)" modal="true" resizable="false" draggable="false">
<h:form id="TurmaListForm">
<p:panel id="display">
<p:dataTable id="datalist" value="#{turmaMB.turmas}" var="turma"
paginator="true"
rows="5"
rowsPerPageTemplate="5,10,20,30,40,50"
selectionMode="single"
selection="#{turmaMB.bean}"
rowKey="#{turma.id}"
liveScroll="true"
>
<p:column headerText="#">
<h:outputText value="#{turma.id}"/>
</p:column>
<p:column headerText="Turma">
<h:outputText value="#{turma.turma}"/>
</p:column>
<p:column headerText="Ano">
<h:outputText value="#{turma.ano}" />
</p:column>
</p:dataTable>
<p:commandButton id="createButton" icon="ui-icon-plus" value="Novo" update=":TurmaCreateForm" oncomplete="PF('TurmaCreateDialog').show()"/>
</p:panel>
</h:form>
<ui:include src="create.xhtml"/>
</p:dialog>
托管bean
<p:dialog header="Cadastro de turma" id="TurmaCreateDlg" widgetVar="TurmaCreateDialog" appendTo="@(body)" modal="true" resizable="false" draggable="false">
<h:form id="TurmaCreateForm">
<p:growl id="growl" life="3000"/>
<p:panelGrid columns="2" id="display">
<f:validateBean>
<p:outputLabel value="Turma"/>
<p:inputText value="#{turmaMB.bean.turma}"
maxlength="50"
id="turmaId"
>
</p:inputText>
<p:outputLabel value="Ano"/>
<p:inputText value="#{turmaMB.bean.ano}"
maxlength="4"
id="anoId"
>
</p:inputText>
</f:validateBean>
</p:panelGrid>
<p:panel>
<p:commandButton value="Salvar" action="#{turmaMB.insert(turmaMB.bean)}" update="display,:TurmaListForm:datalist,growl">
<f:ajax execute="@form" render="@form"/>
</p:commandButton>
<p:commandButton value="Cancelar" onclick="TurmaCreateDialog.hide()"/>
</p:panel>
</h:form>
</p:dialog>
答案 0 :(得分:1)
您的代码很好,Ajax似乎不是问题。问题源于您的turmas List,它填充一次:第一次访问turma时。
所以你有两个选择。
turmas=null
清除turmas列表,因此强制dao在第一次调用getTurmas()
时重新加载所有内容。当然第一个选择是在数据库上产生更多流量。第二个选项是备用数据库,但你有一些旧数据的副本。
所以基本上任何这些解决方案都可以解决您的问题:
选项1:
public void insert(Turma t){
dao.insert(t);
turmas = null;
bean = new Turma();
}
选项2:
public void insert(Turma t){
dao.insert(t);
turmas.add(t);
bean = new Turma();
}