簡體   English   中英

子實體的參數和數據表的詳細信息

[英]Details with parameter and datatable for child entity

我正在編寫一個 Java EE 應用程序來對公司員工進行年度評估。 當我單擊“詳細信息”時,我想顯示每個協作者的評估詳細信息。

3 個受影響的表是“Collaborateur”、“Entretien”和“NoteEntretien”

因此,當我選擇一個合作者並單擊查看詳細信息時,我希望被重定向到一個新頁面,其中包含表單上的合作者詳細信息,並在帶有他的評估的數據表之后。 當我點擊評估細節時,我應該被重定向到另一個頁面,其中包含評估的不同注釋。

我在前端使用帶有 Primefaces 5.0 的 JSF 2.x,在持久性上使用 EclipseLink,在業務端使用 EJB 3.1。

我已經有了解決方案,可以在沒有帶有協作者評估的數據表的情況下在彈出窗口中顯示協作者詳細信息。

請幫助我找到最好的方法來做到這一點。

謝謝!

協作者列表.xhtml

<?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:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:p="http://primefaces.org/ui">

<ui:composition template="/template.xhtml">


    <ui:define name="title">
        <h:outputText value="Liste des Collaborateurs"></h:outputText>
    </ui:define>

    <ui:define name="body">
        <h:form id="CollaborateurListForm">
            <p:panel header="Liste des Collaborateurs">
                <p:dataTable id="datalist" value="#{collaborateurController.items}" var="item"
                             selectionMode="single" selection="#{collaborateurController.selected}"
                             paginator="true"
                             rowKey="#{item.idCollaborateur}"
                             rows="10"
                             rowsPerPageTemplate="10,20,30,40,50"
                             >

                    <p:ajax event="rowSelect"   update="createButton viewButton editButton 
 deleteButton entretienButton"/>
                    <p:ajax event="rowUnselect" update="createButton viewButton editButton 
  deleteButton entretienButton"/>

                    <p:column sortBy="#{item.idCollaborateur}" filterBy="#{item.idCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Matricule"/>
                        </f:facet>
                        <h:outputText value="#{item.idCollaborateur}"/>
                    </p:column>
                    <p:column sortBy="#{item.nomCollaborateur}" filterBy="#{item.nomCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Nom Complet"/>
                        </f:facet>
                        <h:outputText value="#{item.nomCollaborateur}"/>
                    </p:column>
                    <p:column sortBy="#{item.genreCollaborateur}" filterBy="# 
 {item.genreCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Genre"/>
                        </f:facet>
                        <h:outputText value="#{item.genreCollaborateur}"/>
                    </p:column>
                    <p:column sortBy="#{item.dateNaissanceCollaborateur}" filterBy="# 
  {item.dateNaissanceCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Date de naissance"/>
                        </f:facet>
                        <h:outputText value="#{item.dateNaissanceCollaborateur}">
                            <f:convertDateTime pattern="MM/dd/yyyy" />
                        </h:outputText>
                    </p:column>
                    <p:column sortBy="#{item.dateRecrutementCollaborateur}" filterBy="# 
  {item.dateRecrutementCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Date de rectutement"/>
                        </f:facet>
                        <h:outputText value="#{item.dateRecrutementCollaborateur}">
                            <f:convertDateTime pattern="MM/dd/yyyy" />
                        </h:outputText>
                    </p:column>
                    <p:column sortBy="#{item.statutCollaborateur}" filterBy="# 
  {item.statutCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Statut"/>
                        </f:facet>
                        <h:outputText value="#{item.statutCollaborateur}"/>
                    </p:column>
                    <p:column sortBy="#{item.echelleCollaborateur}" filterBy="# 
   {item.echelleCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Echelle"/>
                        </f:facet>
                        <h:outputText value="#{item.echelleCollaborateur}"/>
                    </p:column>
                    <p:column sortBy="#{item.echelonCollaborateur}" filterBy="# 
  {item.echelonCollaborateur}">
                        <f:facet name="header">
                            <h:outputText value="Echellon"/>
                        </f:facet>
                        <h:outputText value="#{item.echelonCollaborateur}"/>
                    </p:column>
                    <p:column sortBy="#{item.idPosteCollaborateur.libellePoste}" filterBy="# 
  {item.idPosteCollaborateur.libellePoste}">
                        <f:facet name="header">
                            <h:outputText value="Poste"/>
                        </f:facet>
                        <h:outputText value="#{item.idPosteCollaborateur.libellePoste}"/>
                    </p:column>
                    <p:column sortBy="#{item.codeAgenceAffectation.nomAgence}" filterBy="# 
  {item.codeAgenceAffectation.nomAgence}">
                        <f:facet name="header">
                            <h:outputText value="Agence d'affectation"/>
                        </f:facet>
                        <h:outputText value="#{item.codeAgenceAffectation.nomAgence}"/>
                    </p:column>
                    <p:column sortBy="#{item.codeAgenceAffectation.codeGroupeAgence.nomGroupeAgence}"
                              filterBy="# 
  {item.codeAgenceAffectation.codeGroupeAgence.nomGroupeAgence}">
                        <f:facet name="header">
                            <h:outputText value="Groupe d'Agences"/>
                        </f:facet>
                        <h:outputText value="# 
    {item.codeAgenceAffectation.codeGroupeAgence.nomGroupeAgence}"/>
                    </p:column>
                    <p:column sortBy="# 
   {item.codeAgenceAffectation.codeGroupeAgence.codeDirectionRegionale.nomDirectionRegionale}"
                              filterBy="# 
   {item.codeAgenceAffectation.codeGroupeAgence.codeDirectionRegionale.nomDirectionRegionale}">
                        <f:facet name="header">
                            <h:outputText value="Direction régionale"/>
                        </f:facet>
                        <h:outputText value="# 
   {item.codeAgenceAffectation.codeGroupeAgence.codeDirectionRegionale.nomDirectionRegionale}"/>
                    </p:column>
                    <f:facet name="footer">
                        <p:commandButton id="createButton" icon="ui-icon-plus"   value="# 
 {bundle.Create}" actionListener="#{collaborateurController.prepareCreate}" 
  update=":CollaborateurCreateForm" oncomplete="PF('CollaborateurCreateDialog').show()"/>
                        <p:commandButton id="viewButton"   icon="ui-icon-search" value="# 
 {bundle.View}" update=":CollaborateurViewForm" oncomplete="PF('CollaborateurViewDialog').show()" 
  disabled="#{empty collaborateurController.selected}"/>
                        <p:commandButton id="editButton"   icon="ui-icon-pencil" value="# 
 {bundle.Edit}" update=":CollaborateurEditForm" oncomplete="PF('CollaborateurEditDialog').show()" 
 disabled="#{empty collaborateurController.selected}"/>
                        <p:commandButton id="deleteButton" icon="ui-icon-trash"  value="#            
{bundle.Delete}" actionListener="#{collaborateurController.destroy}" update=":growl,datalist" 
 disabled="#{empty collaborateurController.selected}"/>
                        <p:commandButton id="entretienButton" icon="ui-icon-document" value="# 
 {bundle.Entretien}" action="#{collaborateurController}" disabled="#{empty 
 collaborateurController.selected}"/>
                    </f:facet>
                </p:dataTable>
            </p:panel>
        </h:form>

        <ui:include src="Create.xhtml"/>
        <ui:include src="Edit.xhtml"/>
        <ui:include src="View.xhtml"/>
    </ui:define>
</ui:composition>

</html>

查看.xhtml

<?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:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:p="http://primefaces.org/ui">

<ui:composition>

    <p:dialog id="CollaborateurViewDlg" widgetVar="CollaborateurViewDialog" modal="true" resizable="false" appendTo="@(body)" header="#{bundle.ViewCollaborateurTitle}">
        <h:form id="CollaborateurViewForm">
            <h:panelGroup id="display">
                <p:panelGrid columns="2" rendered="#{collaborateurController.selected != null}">
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_idCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.idCollaborateur}" title="#{bundle.ViewCollaborateurTitle_idCollaborateur}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_nomCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.nomCollaborateur}" title="#{bundle.ViewCollaborateurTitle_nomCollaborateur}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_genreCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.genreCollaborateur}" title="#{bundle.ViewCollaborateurTitle_genreCollaborateur}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_dateNaissanceCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.dateNaissanceCollaborateur}" title="#{bundle.ViewCollaborateurTitle_dateNaissanceCollaborateur}">
                        <f:convertDateTime pattern="MM/dd/yyyy" />
                    </h:outputText>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_dateRecrutementCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.dateRecrutementCollaborateur}" title="#{bundle.ViewCollaborateurTitle_dateRecrutementCollaborateur}">
                        <f:convertDateTime pattern="MM/dd/yyyy" />
                    </h:outputText>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_statutCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.statutCollaborateur}" title="#{bundle.ViewCollaborateurTitle_statutCollaborateur}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_echelleCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.echelleCollaborateur}" title="#{bundle.ViewCollaborateurTitle_echelleCollaborateur}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_echelonCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.echelonCollaborateur}" title="#{bundle.ViewCollaborateurTitle_echelonCollaborateur}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_idPosteCollaborateur}"/>
                    <h:outputText value="#{collaborateurController.selected.idPosteCollaborateur.libellePoste}" title="#{bundle.ViewCollaborateurTitle_idPosteCollaborateur}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_codeAgenceAffectation}"/>
                    <h:outputText value="#{collaborateurController.selected.codeAgenceAffectation.nomAgence}" title="#{bundle.ViewCollaborateurTitle_codeAgenceAffectation}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_codeAgenceAffectation}"/>
                    <h:outputText value="# 
   {collaborateurController.selected.codeAgenceAffectation.codeGroupeAgence.nomGroupeAgence}" 
   title="#{bundle.ViewCollaborateurTitle_codeAgenceAffectation}"/>
                    <h:outputText value="#{bundle.ViewCollaborateurLabel_codeAgenceAffectation}"/>
                    <h:outputText value="# 
   {collaborateurController.selected.codeAgenceAffectation.
  codeGroupeAgence.codeDirectionRegionale.nomDirect 
 ionRegionale}" title="#{bundle.ViewCollaborateurTitle_codeAgenceAffectation}"/>
                </p:panelGrid>
                <p:commandButton value="#{bundle.Close}" onclick="CollaborateurViewDialog.hide()"/>
            </h:panelGroup>
            
        </h:form>
    </p:dialog>

</ui:composition>
</html>

CollaborateurController.class :

package com.abb.rh.business.controller;

import com.abb.rh.data.model.Collaborateur;
import com.abb.rh.business.controller.util.JsfUtil;
import com.abb.rh.business.controller.util.JsfUtil.PersistAction;
import com.abb.rh.business.session.CollaborateurFacade;
import com.abb.rh.data.model.Entretien;
import java.io.IOException;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.faces.event.ActionEvent;

@Named("collaborateurController")
@SessionScoped
public class CollaborateurController implements Serializable {

@EJB
private com.abb.rh.business.session.CollaborateurFacade ejbFacade;
private List<Collaborateur> items = null;
private List<Entretien> entretienItems = null;
private Collaborateur selected;
private Entretien entretienCollaborateur;

public CollaborateurController() {
}

public Collaborateur getSelected() {
    return selected;
}

public void setSelected(Collaborateur selected) {
    this.selected = selected;
}

protected void setEmbeddableKeys() {
}

protected void initializeEmbeddableKey() {
}

private CollaborateurFacade getFacade() {
    return ejbFacade;
}

public Collaborateur prepareCreate() {
    selected = new Collaborateur();
    initializeEmbeddableKey();
    return selected;
}

public void create() {
    persist(PersistAction.CREATE, 
ResourceBundle.getBundle("/resources/Bundle").getString("CollaborateurCreated"));
    if (!JsfUtil.isValidationFailed()) {
        items = null;    // Invalidate list of items to trigger re-query.
    }
}

public void update() {
    persist(PersistAction.UPDATE, 
ResourceBundle.getBundle("/resources/Bundle").getString("CollaborateurUpdated"));
}

public void destroy() {
    persist(PersistAction.DELETE, 
 ResourceBundle.getBundle("/resources/Bundle").getString("CollaborateurDeleted"));
    if (!JsfUtil.isValidationFailed()) {
        selected = null; // Remove selection
        items = null;    // Invalidate list of items to trigger re-query.
    }
}

String action;

 //action listener event
 public void attrListener(ActionEvent event){

action = (String)event.getComponent().getAttributes().get("action");

 }

 public void rediriger(String url, Integer collaborateurId) {
  try {
      ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
      ec.redirect(ec.getRequestContextPath() + url);
  } catch (Exception e) {
  }
  }

   public List<Collaborateur> getItems() {
    if (items == null) {
        items = getFacade().findAll();
    }
    return items;
   }

   private void persist(PersistAction persistAction, String successMessage) {
    if (selected != null) {
        setEmbeddableKeys();
        try {
            if (persistAction != PersistAction.DELETE) {
                getFacade().edit(selected);
            } else {
                getFacade().remove(selected);
            }
            JsfUtil.addSuccessMessage(successMessage);
        } catch (EJBException ex) {
            String msg = "";
            Throwable cause = ex.getCause();
            if (cause != null) {
                msg = cause.getLocalizedMessage();
            }
            if (msg.length() > 0) {
                JsfUtil.addErrorMessage(msg);
            } else {
                JsfUtil.addErrorMessage(ex, 
    ResourceBundle.getBundle("/resources/Bundle").getString("PersistenceErrorOccured"));
            }
        } catch (Exception ex) {
            Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);
            JsfUtil.addErrorMessage(ex, 
    ResourceBundle.getBundle("/resources/Bundle").getString("PersistenceErrorOccured"));
        }
    }
}

public Collaborateur getCollaborateur(java.lang.Integer id) {
    return getFacade().find(id);
}

public List<Collaborateur> getItemsAvailableSelectMany() {
    return getFacade().findAll();
}

public List<Collaborateur> getItemsAvailableSelectOne() {
    return getFacade().findAll();
}

public Entretien getEntretienCollaborateur() {
    return entretienCollaborateur;
}

public void setEntretienCollaborateur(Entretien entretienCollaborateur) {
    this.entretienCollaborateur = entretienCollaborateur;
}

public String getAction() {
    return action;
}

public void setAction(String action) {
    this.action = action;
}



@FacesConverter(forClass = Collaborateur.class)
public static class CollaborateurControllerConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
        if (value == null || value.length() == 0) {
            return null;
        }
        CollaborateurController controller = (CollaborateurController) 
  facesContext.getApplication().getELResolver().
                getValue(facesContext.getELContext(), null, "collaborateurController");
        return controller.getCollaborateur(getKey(value));
    }

    java.lang.Integer getKey(String value) {
        java.lang.Integer key;
        key = Integer.valueOf(value);
        return key;
    }

    String getStringKey(java.lang.Integer value) {
        StringBuilder sb = new StringBuilder();
        sb.append(value);
        return sb.toString();
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
        if (object == null) {
            return null;
        }
        if (object instanceof Collaborateur) {
            Collaborateur o = (Collaborateur) object;
            return getStringKey(o.getIdCollaborateur());
        } else {
            Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "object {0} is of type {1}; 
expected type: {2}", new Object[]{object, object.getClass().getName(), 
Collaborateur.class.getName()});
            return null;
        }
    }

}

}

協作者類

public class Collaborateur implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id_collaborateur")
private Integer idCollaborateur;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "nom_collaborateur")
private String nomCollaborateur;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "genre_collaborateur")
private String genreCollaborateur;
@Basic(optional = false)
@NotNull
@Column(name = "date_naissance_collaborateur")
@Temporal(TemporalType.DATE)
private Date dateNaissanceCollaborateur;
@Basic(optional = false)
@NotNull
@Column(name = "date_recrutement_collaborateur")
@Temporal(TemporalType.DATE)
private Date dateRecrutementCollaborateur;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "statut_collaborateur")
private String statutCollaborateur;
@Basic(optional = false)
@NotNull
@Column(name = "echelle_collaborateur")
private int echelleCollaborateur;
@Basic(optional = false)
@NotNull
@Column(name = "echelon_collaborateur")
private int echelonCollaborateur;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idCollaborateur")
private Collection<Entretien> entretienCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idCollaborateur")
private Collection<NoteEntretien> noteEntretienCollection;
@JoinColumn(name = "id_poste_collaborateur", referencedColumnName = "id_poste")
@ManyToOne
private Poste idPosteCollaborateur;
@JoinColumn(name = "code_agence_affectation", referencedColumnName = "code_agence")
@ManyToOne
private AgenceAffectation codeAgenceAffectation;

娛樂類

公共類 Entretien 實現了 Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id_entretien")
private Integer idEntretien;
@Basic(optional = false)
@NotNull
@Column(name = "date_entretien")
@Temporal(TemporalType.DATE)
private Date dateEntretien;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "diagnostic_entretien")
private String diagnosticEntretien;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "observations_entretien")
private String observationsEntretien;
@JoinColumn(name = "id_collaborateur", referencedColumnName = "id_collaborateur")
@ManyToOne(optional = false)
private Collaborateur idCollaborateur;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idEntretien")
private Collection<NoteEntretien> noteEntretienCollection;

NoteEntretien.class

公共類 NoteEntretien 實現了 Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id_note_entretien")
private Integer idNoteEntretien;
@Basic(optional = false)
@NotNull
@Column(name = "val_note_entretien")
private float valNoteEntretien;
@JoinColumn(name = "id_competence", referencedColumnName = "id_competence")
@ManyToOne(optional = false)
private Competence idCompetence;
@JoinColumn(name = "id_collaborateur", referencedColumnName = "id_collaborateur")
@ManyToOne(optional = false)
private Collaborateur idCollaborateur;
@JoinColumn(name = "id_entretien", referencedColumnName = "id_entretien")
@ManyToOne(optional = false)
private Entretien idEntretien;

這是一個復雜的問題。 沒有“最佳解決方案”。 我只是可以推薦一些實現它的方法。

  1. 准備一個帶有 URL 和控制器CollaborateurDetailController的單獨模板頁面。
  2. 在該控制器的init()方法中,從 URL 中獲取"id"參數,並通過該控制器的"Selected"的 id 獲取編輯后的實體。 或者,如果沒有"id" ,則創建一個新實例。
  3. 更改列表中編輯按鈕上的偵聽器,以重定向到帶有"id"參數的新控制器頁面,或重定向到創建按鈕的空白頁面。

我建議為細節制作單獨的控制器。 在成熟的項目中,您將需要詳細實現復雜的表單和組件。 模態窗口是一個基本的解決方案,在很多情況下,您將來只需要重構即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM