良い一日
Primefaces データテーブルを使用して更新不可能な Postgres ビューの結果を表示することは可能ですか (「チェック」をクリックして行の編集を受け入れることができないことに固執しているようです)、onRowEdit イベントにカスタム コードを含めることは可能ですか変更をDBに正しく永続化しますか?
それとも、情報を「更新」して表示するために、Primefaces / JSF データテーブルを更新可能なエンティティ マッピングにリンクする必要がありますか?
私は.xhtmlファイルにこれを持っています:
<p:dataTable id="conf_data_table" var="confRoomBookingDisplay" style="width: auto" rowIndexVar="rowid" editingRow="true"
value="#{conferenceRoomBookingView.conferenceRoomBookingList}" editable="true"
editMode="row" widgetVar="cellBookings">
<f:facet name="header">
Venue Booking
</f:facet>
<p:ajax event="rowEdit" listener="#{conferenceRoomBookingView.onRowEdit}"
update=":create_new_booking:growl"/>
<p:ajax event="rowEditCancel" listener="#{conferenceRoomBookingView.onRowCancel}"
update=":create_new_booking:growl"/>
<p:column headerText="Booking Ref" style="width: 10%; text-align: center">
<p:outputLabel value="#{ConferenceRoomBooking.conferenceRoomBookingAid}"
style="text-align: center"/>
</p:column>
<p:column headerText="Time Slot" style="width: 10%; text-align: center">
<p:outputLabel value="#{ConferenceRoomBooking.timeSlot}" style="text-align: center"/>
</p:column>
<p:column headerText="Booked For" style="width: 15%; alignment: center">
<p:outputLabel value="#{ConferenceRoomBooking.empShortNameSurname}"
style="text-align: left"/>
</p:column>
<p:column headerText="Booking Comment" style="width: 60%; alignment: center">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{ConferenceRoomBooking.conferenceRoomBookingComment}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{ConferenceRoomBooking.conferenceRoomBookingComment}"
style="width:98%"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 5%">
<p:rowEditor />
</p:column>
</p:dataTable>
そして、@RequestScoped (javax.enterprise.context.RequestScoped) @Named バッキング Bean で (@ViewScoped - org.omnifaces.cdi アノテーションでも試しました)。
イベント コードは次のようになります。
public void onRowEdit(RowEditEvent event) {
conferenceRoomBookingAid = (((ConferenceRoomBookingEntity) event.getObject()).getConferenceRoomBookingAid());
String msgEdit = Long.toString(conferenceRoomBookingAid);
FacesMessage msg = new FacesMessage("Booking Edited for Reference ID:", msgEdit);
FacesContext.getCurrentInstance().addMessage(null, msg);
confRoomService.persistComment(How do I get my updated value from the event???);
}
public void onRowCancel(RowEditEvent event) {
conferenceRoomBookingAid = (((ConferenceRoomBookingEntity) event.getObject()).getConferenceRoomBookingAid());
String msgEdit = Long.toString(conferenceRoomBookingAid);
FacesMessage msg = new FacesMessage("Booking Cancelled for Reference ID: ", msgEdit);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
現在、コードをコメントアウトするとconfRoomService.persistComment(How do I get my updated value from the event???);
、行を編集できる適切にレンダリングされたテーブルが表示されます。ただし、問題は、マウスで「受け入れる」/「はい」のチェックマークをクリックできず、Enter キーを押すとセルが再びクリアされることです。
更新不可能なビューを使用している理由は、現在の DB 構造が外部キーを使用してデータを人にリンクし、基本エンティティを使用すると、その値ではなく外部キー ID が表示されるためです。