用于显示不可更新数据库视图结果的 Primefaces 数据表?
Primefaces datatable used to display non updateable database view results?
美好的一天
是否有可能(我似乎无法点击 'tick' 来接受行编辑)使用 Primefaces 数据table 来显示不可更新的结果Postgres 视图,但在 onRowEdit 事件中有自定义代码可以将更改正确保存到数据库?
或者必须将 Primefaces / JSF 数据table link 编辑到可更新的实体映射,以便它用于 'update' 和显示信息?
我在 .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 backing 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???);
代码,使我能够正确呈现 table,我可以在其中编辑该行。然而,问题是我无法用鼠标单击 'accept' / 'yes' 勾号,按下回车键只会再次清除单元格。
我使用不可更新视图的原因是当前的数据库结构使用外键将数据 link 发送给人员,使用基本实体将显示外键 ID 而不是其值。
经过很多不同版本的Entities和数据库视图,我得出的结论是JSF / Primefaces数据table组件是要使用的:
- 当通过 mutable 的实体直接链接时,因此 100% 表示底层数据库 table,没有数据的自定义视图,允许完全编辑并且可以工作如广告所示。
- 当链接到基于数据库视图(可更新或不可更新)的实体时,数据table的单元格/行无法在数据table cellEdit 或 rowEdit 事件中编辑.
如果上面的内容被证明是错误的,我会欣喜若狂,但现在已经和平使用数据table作为基于数据库视图的 immutable。
美好的一天
是否有可能(我似乎无法点击 'tick' 来接受行编辑)使用 Primefaces 数据table 来显示不可更新的结果Postgres 视图,但在 onRowEdit 事件中有自定义代码可以将更改正确保存到数据库?
或者必须将 Primefaces / JSF 数据table link 编辑到可更新的实体映射,以便它用于 'update' 和显示信息?
我在 .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 backing 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???);
代码,使我能够正确呈现 table,我可以在其中编辑该行。然而,问题是我无法用鼠标单击 'accept' / 'yes' 勾号,按下回车键只会再次清除单元格。
我使用不可更新视图的原因是当前的数据库结构使用外键将数据 link 发送给人员,使用基本实体将显示外键 ID 而不是其值。
经过很多不同版本的Entities和数据库视图,我得出的结论是JSF / Primefaces数据table组件是要使用的:
- 当通过 mutable 的实体直接链接时,因此 100% 表示底层数据库 table,没有数据的自定义视图,允许完全编辑并且可以工作如广告所示。
- 当链接到基于数据库视图(可更新或不可更新)的实体时,数据table的单元格/行无法在数据table cellEdit 或 rowEdit 事件中编辑.
如果上面的内容被证明是错误的,我会欣喜若狂,但现在已经和平使用数据table作为基于数据库视图的 immutable。