JSF Primefaces Ajax 更新
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20569950/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JSF Primefaces Ajax update
提问by Burak
How can I update my datatable by ajax row select function? What would it be the values that will be put on update parameter ? thanks for your help
如何通过ajax行选择功能更新我的数据表?将放在更新参数上的值是什么?感谢您的帮助
Here is my code, there is a datatable and after I click one of the rows in datatable then it shows detail of that row in datatable below but there is a problem with update
这是我的代码,有一个数据表,在我单击数据表中的其中一行后,它会在下面的数据表中显示该行的详细信息,但更新存在问题
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<f:view>
<h:form id="form">
<p:dataTable id="users" var="user" value="#{userOS.osList}"
paginator="true" rows="10" rowKey="#{user.kisiid}"
selection="#{userOS.selectedOS}" selectionMode="single">
<f:facet name="header">
Kullan?c? detaylar?n? g?rmek i?in view butonuna t?klay?n?z
</f:facet>
<p:ajax event="rowSelect" listener="#{userOS.onRowSelect}"
update=":form" oncomplete="userDialog" />
<p:column headerText="Student No" sortBy="ogrencino"
filterBy="ogrencino" id="ogrencino">
<h:outputText value="#{user.ogrencino}" />
<f:param name="kid" value="#{userOS.osList.rowIndex}" />
</p:column>
<p:column headerText="Name" sortBy="ad" filterBy="ad" id="ad">
<h:outputText value="#{user.ad}" />
</p:column>
<p:column headerText="Surname" sortBy="soyad" filterBy="soyad"
id="soyad">
<h:outputText value="#{user.soyad}" />
</p:column>
<p:column headerText="Faculty" sortBy="altbirim.ad"
filterBy="altbirim.ad" id="altbirim">
<h:outputText value="#{user.altbirim.ad}" />
</p:column>
<p:column headerText="Department" sortBy="bolum.ad"
filterBy="bolum.ad" id="bolum">
<h:outputText value="#{user.bolum.ad}" />
</p:column>
<p:column headerText="Status" sortBy="ogrencidurum.ad"
filterBy="ogrencidurum.ad" id="ogrencidurum">
<h:outputText value="#{user.ogrencidurum.ad}" />
</p:column>
<f:facet name="footer">
</f:facet>
</p:dataTable>
<p:tabView id="tabView">
<p:tab id="dialog" title="User Detail" widgetVar="userDialog">
<h:panelGrid id="panelgrid" columns="2" cellpadding="4">
<p:dataTable id="display" var="adres" value="#{userOS.adresList}">
<p:column headerText="Adres Tipi">
<h:outputText value="#{adres.addressType}" id="adresturu"/>
</p:column>
<p:column headerText="Adres">
<h:outputText value="#{adres.address}" id="adres"/>
</p:column>
<p:column headerText="?l">
<h:outputText value="#{adres.city}" id="sehir"/>
</p:column>
<p:column headerText="ülke">
<h:outputText value="#{adres.country}" id="ulke"/>
</p:column>
</p:dataTable>
</h:panelGrid>
</p:tab>
<p:tab id="tab2" title="Godfather Part II">
</p:tab>
<p:tab id="tab3" title="Godfather Part III">
</p:tab>
</p:tabView>
</h:form>
</f:view>
</h:body>
</html>
回答by Kishor Prakash
You are updating the entire @form, in which you are keeping both DataTables.
So why don't you update only the second DataTable when you select a row in First DataTable.
Since your second Datatable is in p:tabViewso it will take ID as tabView:display.
So your p:ajaxwould be:
您正在更新整个@form,其中保留了两个数据表。
那么当您在第一个 DataTable 中选择一行时,为什么不只更新第二个 DataTable。
由于您的第二个数据表在其中,p:tabView因此它将 ID 作为tabView:display.
所以你p:ajax会是:
<p:ajax event="rowSelect" process="@this" listener="#{userOS.onRowSelect}"
update=":form:tabView:display" oncomplete="userDialog" />
OR
或者
You can move the Second Table in separate Table and update entire Form.
In my experience with p:tabViewI don't keep p:tabViewinside form.
Rather I'll keep form inside p:tabView.
See this Code:
您可以在单独的表格中移动第二个表格并更新整个表格。
根据我的经验,p:tabView我不会保持p:tabView内部状态。
相反,我会在里面保持形式p:tabView。
请参阅此代码:
<h:form id="form">
<p:dataTable id="users" var="user" value="#{userOS.osList}" ...>
<p:ajax event="rowSelect" listener="#{userOS.onRowSelect}"
update=":tabView:form2" oncomplete="userDialog" />
.....
.....
</p:dataTable>
</h:form>
<p:tabView id="tabView">
<p:tab id="dialog" title="User Detail" widgetVar="userDialog">
<h:panelGrid id="panelgrid" columns="2" cellpadding="4">
<h:form id="form2">
<p:dataTable id="display" var="adres" value="#{userOS.adresList}">
......
......
</p:dataTable>
</h:form>
</h:panelGrid>
</p:tab>
</p:tabView>

