追加、フィルタリング、編集、削除、ページ付け機能を備えたCRUDPrimeFacesdataTableを作成したいと思います。PrimeFaces 3.4.2 dataTable、JSF 2.1を使用して、ダイアログ(つまりモーダルポップアップウィンドウ)に新しいレコードを「追加」しようとしています。
他のすべての操作は正常に機能していますが、add操作後にdataTableが正しく更新されていません。最初の追加操作後に正しく更新されます。その後、2行目を追加すると、dataTableが更新されますが、最初に追加された行が2回目に追加された行に置き換えられます。その後、3行目を追加すると、1行目が3行目に置き換えられます。データベーステーブルは、すべての場合に完全に更新されています。
jsfおよびマネージドBeanからのコードスニペット:
JSFコード:
<h:body>
<h:form id="form1">
<h:messages id="messages1"/>
<br/>
<p:commandButton id="Addbtn" value="Add" oncomplete="AddDialog.show()" update=":addform"/>
<br/>
<p:dataTable id="dtusers" value="#{userdataController.retrieveData()}" var="item"
rows="8" paginator="true" emptyMessage="No Records Found"
paginatorAlwaysVisible="false">
<p:column style="width:150px" filterMatchMode="contains" filterBy ="#{item.id}">
<f:facet name="header"> Id </f:facet>
<h:outputText value="#{item.id}"/>
</p:column>
<p:column style="width:150px" filterMatchMode="contains" filterBy="#{item.name}">
<f:facet name="header"> Name </f:facet>
<h:outputText value="#{item.name}"/>
</p:column>
<p:column style="width:150px">
<p:commandButton id="editButton" update=":editform" oncomplete="EditDialog.show()" value="Edit">
<f:setPropertyActionListener value="#{item}" target="#{userdataController.selectedUser}"/>
</p:commandButton>
</p:column>
<p:column style="width:150px">
<p:commandButton id="deleteButton" update=":deleteform" oncomplete="UserDialog.show()" value="Delete">
<f:setPropertyActionListener value="#{item}" target="#{userdataController.selectedUser}"/>
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
<p:dialog header="Add User Data" resizable="false" id="AddDialog" widgetVar="AddDialog" modal="true" showEffect="fade" hideEffect="fade" position="center" dynamic="true">
<h:form id="addform">
<p:outputPanel id="AddDisplay">
<p:panelGrid columns="2" >
<f:facet name="header">
Add Userdata
</f:facet>
<h:outputLabel for="Id" value="Enter Id:"/>
<p:inputText id="Id" value="#{userdataController.selected.id}" />
<h:outputLabel for="Name" value="Enter Name:"/>
<p:inputText id="Name" value="#{userdataController.selected.name}"/>
<p:commandButton actionListener="#{userdataController.create}" update=":form1:dtusers :form1:messages1" value="Save" oncomplete="AddDialog.hide()" style="margin:0"/>
</p:panelGrid>
</p:outputPanel>
</h:form>
</p:dialog>
</h:body>
Manaed Beanコードスニペット:
@ManagedBean(name = "userdataController")
@SessionScoped
public class UserdataController implements Serializable {
private Userdata current;
private DataModel items = null;
@EJB
private PrimeFacesDb.session.UserdataFacade ejbFacade;
private int id;
private String name;
private Userdata SelectedUser;
public UserdataController() {
}
//getters setters for id,name and SelectedUser
private UserdataFacade getFacade() {
return ejbFacade;
}
public List retrieveData() {
List result = getFacade().findAll();
return result;
}
public void create() {
try {
getFacade().create(current);
JsfUtil.addSuccessMessage("Userdata created successfully");
} catch (Exception e) {
JsfUtil.addErrorMessage(e, "Persistence Error occured");
}
}
}
PrimeFacesフォーラム、NetBeansサンプルコードおよび編集可能なデータブルサンプル(mastertheboss.com/primefaces/datatables-with-primefaces/…;)で入手可能な情報は、作成、フィルタリング、編集、および削除機能を備えた、よりわかりやすいCRUDデータテーブルを作成するのに役立ちました。Mr.BalusCのコメント、JSF 2.xの投稿に関する解決策は私にとって貴重であるため、Mr.BalusCに言及しないと不完全です。