Primefaces数据表单选择onrowselect侦听器调用getList

时间:2016-01-15 03:20:09

标签: jsf-2 primefaces datatable

我的xhtml页面:

<h:form id="myform">
    <p:panel header="Requests">
        <p:tabView dynamic="true" cache="true">
            <p:tab title="New requests">
                <h:panelGrid columns="1" cellpadding="10">
                    <p:dataTable id="newReq" value="#{requestsBean.newRequests}" var="newReq" selectionMode="single" selection="#{requestsBean.selectedRequest}" rowKey="#{newRequest.id}" scrollRows="20" scrollable="true" liveScroll="false" scrollHeight="400" style="margin-bottom:0">
                        <p:ajax event="rowSelect" listener="#{requestsBean.onRowSelect}" update=":requestForm:requestDetail" oncomplete="PF('requestDialog').show()"/>
...Columns...
                    </p:dataTable>
                </h:panelGrid>
            </p:tab>
            ...One More Tab...
        </p:tabView>
    </p:panel>
</h:form>
<h:form id="requestForm">
    <p:dialog header="Details" widgetVar="requestDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
        <p:outputPanel id="requestDetail" style="text-align:center;">
            <h:panelGrid columns="2" cellpadding="5">
                <h:outputText value="Req #:"/>
                <h:outputText value="#{requestsBean.selectedRequest.reqNo}"/>
                <h:outputText value="Submitted By:" />
                <h:outputText value="#{requestsBean.selectedRequest.user}"/>
                <h:outputText style="font-weight:bold;" value="Submitted On:"/>
                <h:outputText value="#{requestsBean.selectedRequest.date}"/>
            </h:panelGrid>
        </p:outputPanel>
    </p:dialog>
</h:form>

我的ManagedBean:

import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.event.ActionEvent;
import javax.faces.view.ViewScoped;
import org.primefaces.event.SelectEvent;
import com.company.model.Requests;
import com.company.service.RequestsService;

@ViewScoped
public class RequestsBean implements Serializable {
    @ManagedProperty(value = "#{requestsService}")
    private RequestsService requestsService;
    private Requests selectedRequest;
    private List<Requests> newRequests;
    public List<Requests> getNewRequests() {
        if (newRequests == null) {
            newRequests = requestsService.getNewRequests();
        }
        return newRequests;
    }
    public void onRowSelect(SelectEvent event) {
    }
    ...getters...setters...
}

我的模特课程:

@Entity
@Table(name = "REQUESTS")
public class Requests implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "request_gen")
    @SequenceGenerator(name = "request_gen", sequenceName = "REQUESTS_SEQUENCE")
    @Column(name = "REQ_NO")
    private Long reqNo;
    @Column(name = "DATE", nullable = false)
    private Date date;
    @Column(name = "USER", nullable = false)
    private Long user;
...getters setters...
}

列表查询使用所有详细信息(模型属性)获取请求。当我在数据表中选择一行时,对话框将打开并显示所需的结果,但会再次触发列表查询(使用newRequests = null再次调用方法getNewRequests())。我想阻止查询再次触发,因为已经使用RequestList获取了所有数据。

有人可以帮忙吗?

0 个答案:

没有答案