JSF: dataTable Getter wird nie aufgerufen

Status
Nicht offen für weitere Antworten.

Vale

Mitglied
Hallo.

Ich habe ein Problem auf dessen Lösung ich nicht komme. Vielleicht habt ihr einen Rat.

Hier eine kurze Beschreibung:
  • dataTable
  • Getter wird nie aufgerufen -> Tabelle immer leer
  • keinerlei Fehlermeldungen

JSF-Code. Es geht um das dataTable "tableContracts" in der Mitte des Codes.
HTML:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    </head>
    <body>
        <f:view>
            <h:outputText style="font-size: 3em; font-family: Verdana" value="Activity"></h:outputText>
            <h:outputText style="font-family: Verdana" value="Version: Prototyp 2"></h:outputText>
            <h:graphicImage style="position: absolute; top:-0.1%; left:89%" value="/resources/pics/isys.gif"></h:graphicImage>
            </hr>
            <h:form id="form">
            <h:panelGrid id="tableFormat" columns="1" width="800" border="1" cellpadding="0" cellspacing="5">
                <h:panelGrid  id="tableSelection" columns="3" border="0" cellpadding="0" cellspacing="10" width="800">
                    <h:panelGroup style="text-align: left;">
                        <h:outputLabel value="Mitarbeiter bearbeiten: " for="employeeSelection" style="font-family: Verdana; font-size: x-small"/>
                        <h:selectOneMenu id="employeeSelection"
                                         value="#{EmployeeMgmtBean.employeeId}"
                                         valueChangeListener="#{EmployeeMgmtBean.chooseEmployee}"
                                         immediate="true"
                                         onchange="submit();">
                            <f:selectItem itemValue="0" itemLabel="--- Bitte auswählen ---"/>
                            <f:selectItems value="#{EmployeeMgmtBean.employeeList}"/>
                       </h:selectOneMenu>
                    </h:panelGroup>
                    <h:panelGroup style="text-align: center;">
                        <h:commandButton id="newButton" value="Mitarbeiter erstellen" action="#{EmployeeMgmtBean.newEmployee}" 
                                         disabled="#{EmployeeMgmtBean.isCreateButtonDisabled}" immediate="true"/>
                    </h:panelGroup>
                    <h:panelGroup  style="text-align: right;">
                        <h:commandButton id="saveButton" value="Speichern" action="#{EmployeeMgmtBean.saveEmployee}"
                                         disabled="#{EmployeeMgmtBean.isSaveButtonDisabled}"/>
                    </h:panelGroup>
                </h:panelGrid>
            <!-- Eingabefelder -->
            <h:panelGrid id="tableInput" columns="2" style="font-family: Verdana; font-size: x-small">
                <h:panelGrid columns="2">
                    <h:panelGrid columns="2"> <!-- EMPLOYEE -->
                        <f:facet name="header">
                            <h:outputText value="Daten von:   #{EmployeeMgmtBean.employeeName}"/>
                        </f:facet>
                        <h:outputLabel value="Vorname: *"  for="firstName"/>
                        <h:inputText id="firstName" 
                                 value="#{EmployeeMgmtBean.employeeFirstName}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Nachname: *"  for="lastName"/>
                        <h:inputText id="lastName" 
                                 value="#{EmployeeMgmtBean.employeeLastName}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Geburtstag: *"  for="birthday"/>
                        <h:inputText id="birthday" 
                                 value="#{EmployeeMgmtBean.employeeDateOfBirth}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Datev Nummer: "  for="datevNumber"/>
                        <h:inputText id="datevNumber" 
                                 value="#{EmployeeMgmtBean.employeeDatevNumber}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="E-Mail Adresse: *"  for="email"/>
                        <h:inputText id="email" 
                                 value="#{EmployeeMgmtBean.employeeEmailAdress}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Eintrittsdatum: *"  for="entryDate"/>
                        <h:inputText id="entryDate" 
                                 value="#{EmployeeMgmtBean.employeeEntryDate}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Austrittsdatum: "  for="leavingDate"/>
                        <h:inputText id="leavingDate" 
                                 value="#{EmployeeMgmtBean.employeeLeavingDate}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Mitarbeiter Status: *" for="employeeStatusSelection" style="font-family: Verdana; font-size: x-small"/>
                        <h:selectOneMenu id="employeeStatusSelection" value="#{EmployeeMgmtBean.employeeStatusId}"
                                         disabled="#{EmployeeMgmtBean.isFieldDisabled}">
                            <f:selectItems value="#{EmployeeMgmtBean.employeeStatusList}"/>
                       </h:selectOneMenu>
                    </h:panelGrid>
                    <h:panelGrid columns="2"> <!-- CONTRACT -->
                            <h:dataTable id="tableContracts" value="#{EmployeeMmgtBean.employmentContractList}" 
                                         var="item" border="1" cellpadding="2" cellspacing="0" width="400" 
                                         style="font-family: verdana; font-size: x-small; text-align: center;">
                                <f:facet name="header">
                                        <h:outputText value="Verträge des Mitarbeiters" style="font-weight: bold"></h:outputText>
                                </f:facet>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="Typ" style="font-weight: bold"></h:outputText>
                                    </f:facet>
                                    <h:outputText value="#{item.contractTypeName}"></h:outputText>
                               </h:column>
                               <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="Std./Woche" style="font-weight: bold"></h:outputText>
                                    </f:facet>
                                    <h:outputText value="#{item.hoursPerWeek}"></h:outputText>
                               </h:column>
                               <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="Urlaub/Jahr" style="font-weight: bold"></h:outputText>
                                    </f:facet>
                                    <h:outputText value="#{item.vacationPerYear}"></h:outputText>
                               </h:column>
                               <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="mitn. ÜStd." style="font-weight: bold"></h:outputText>
                                    </f:facet>
                                    <h:outputText value="#{item.overtimeTakeover}"></h:outputText>
                               </h:column>
                               <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="von" style="font-weight: bold"></h:outputText>
                                    </f:facet>
                                    <h:outputText value="#{item.beginAsString}"></h:outputText>
                               </h:column>
                               <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="bis" style="font-weight: bold"></h:outputText>
                                    </f:facet>
                                    <h:outputText value="#{item.endAsString}"></h:outputText>
                               </h:column>
                            </h:dataTable>
                        <h:commandButton id="buttonNewContract" value="Neu" action="#{EmployeeMgmtBean.newContract}"
                                         disabled="#{EmployeeMgmtBean.isFieldDisabled}"
                                         immediate="true"/>
                        
                        <h:outputLabel value="Vertragstyp: *" for="contractTypeSelection" style="font-family: Verdana; font-size: x-small"/>
                        <h:selectOneMenu id="contractTypeSelection" value="#{EmployeeMgmtBean.contractTypeId}"
                                             disabled="#{EmployeeMgmtBean.isFieldDisabled || EmployeeMgmtBean.isContractFieldDisabled}">
                            <f:selectItems value="#{EmployeeMgmtBean.employmentContractTypeList}"/>
                        </h:selectOneMenu> 
                        
                        <h:outputLabel value="Arbeitsstunden/Woche: *"  for="vacation"/>
                        <h:inputText id="hoursWeek" 
                                 value="#{EmployeeMgmtBean.contractHoursPerWeek}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled || EmployeeMgmtBean.isContractFieldDisabled}"/>
                                 
                        <h:outputLabel value="Jahresurlaub in Tagen: *"  for="vacation"/>
                        <h:inputText id="vacation" 
                                 value="#{EmployeeMgmtBean.contractVacationPerYear}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled || EmployeeMgmtBean.isContractFieldDisabled}"/>
                        
                        <h:outputLabel value="Mitnahme der Überstunden: *"  for="overtime"/>
                        <h:selectBooleanCheckbox id="overtime" 
                                 value="#{EmployeeMgmtBean.contractOvertimeTakeover}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled || EmployeeMgmtBean.isContractFieldDisabled}"/>
                                 
                        <h:outputLabel value="Vertragsbeginn: *"  for="contractBegin"/>
                        <h:inputText id="contractBegin" 
                                 value="#{EmployeeMgmtBean.contractBegin}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled || EmployeeMgmtBean.isContractFieldDisabled}"/>
                                 
                        <h:outputLabel value="Vertragsende: "  for="contractEnd"/>
                        <h:inputText id="contractEnd" 
                                 value="#{EmployeeMgmtBean.contractEnd}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled || EmployeeMgmtBean.isContractFieldDisabled}"/>
                    </h:panelGrid>
                    <h:panelGrid columns="2"> <!-- USER-ACCOUNT -->
                        <h:outputLabel value="Anmeldename: *"  for="login"/>
                        <h:inputText id="login" 
                                 value="#{EmployeeMgmtBean.userAccountLoginName}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Passwort: *"  for="password"/>
                        <h:inputSecret id="password" 
                                 value="#{EmployeeMgmtBean.userAccountPassword}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Passwort wiederholen: *"  for="password2"/>
                        <h:inputSecret id="password2" 
                                 value="#{EmployeeMgmtBean.userAccountPassword2}" 
                                 disabled="#{EmployeeMgmtBean.isFieldDisabled}"/>
                                 
                        <h:outputLabel value="Rolle: *" for="roleSelection" style="font-family: Verdana; font-size: x-small"/>
                            <h:selectOneMenu id="roleSelection" value="#{EmployeeMgmtBean.roleId}"
                                             disabled="#{EmployeeMgmtBean.isFieldDisabled}">
                                <f:selectItems value="#{EmployeeMgmtBean.roleList}"/>
                            </h:selectOneMenu>  
                    </h:panelGrid>
                    <h:commandButton id="cancelButton" value="Abbrechen" action="#{EmployeeMgmtBean.cancelEdit}"
                                     disabled="#{EmployeeMgmtBean.isCancelButtonDisabled}"/>
                    <h:commandButton id="saveButton2" value="Speichern" action="#{EmployeeMgmtBean.saveEmployee}"
                                     disabled="#{EmployeeMgmtBean.isSaveButtonDisabled}"/>
               </h:panelGrid>
            </h:panelGrid>
            </h:panelGrid>
            </h:form>
       </f:view>
    </body>
</html>

Bean-Code
Code:
/* CONTRACT */
    public List<EmploymentContractWrapper> getEmploymentContractList() {
        Logger.info("getContractList: ");
        List<EmploymentContractWrapper> contractWrapperList = new ArrayList<EmploymentContractWrapper>();
        if (employee != null && !isEmployeeChanged) {
            for (EmploymentContract contract : employee.getEmploymentContractList()) {
                try {
                    contractWrapperList.add(new EmploymentContractWrapper(contract));
                } catch (ActivityException e) {
                    // Felher ausdrucken und weiter machen
                    Logger.warn(e.getMessage());
                }
            }
        }
        Logger.info("getContractList: " + contractWrapperList.size());
        return contractWrapperList;
    }

Vielen Dank für eure Hilfe.
 
vielleicht muss es ein Klassenattribut
employmentContractList
geben,

im getter kannst du ja LazyLoading bauen:

if (this.employmentContractList != null) {
return this.employmentContractList;
}
.. Attribut setzen
return this.employmentContractList;
 
Hi SlaterB,

danke, das war ein guter Tipp. Allerdings hat eine entsprechende Korrektur keinerlei Effekt gezeigt. :-( Weder Erfolg noch Fehlermeldung.

Welche Gründe kann es noch haben, dass ein Getter nicht aufgerufen wird?
 
ich weiß es nicht außer den üblichen (Bean nicht da, Tippfehler)

bist du dir denn sicher mit der Syntax für die Anzeige?
schon erfolgreich eine einfache Tabelle mit nur einer Spalte und einfachen Strings angezeigt?
am besten mit einem einfachen Bean A und Tabelle mit Namen b
 
In einer anderen JSF-Seite die ich zuvor gebaut habe, habe ich zwei viel größere Tabelle benutzt. Mit schicken Spielereien wie "Löschen" Buttons für jede Zeile. Das lief auf Anhieb.
Warum nun diese, eigentlich weniger anspruchsvolle Tabelle, nicht funktionieren will, ist mir gänzlich ein Rätsel. Ehrlich gesagt weiß ich schon gar nicht mehr weiter. Ich habe auch schon eine JSF-Seite gebaut ohne weiteren Inhalt, außer der Tabelle. Aber der Getter wird nie aufgerufen.

Mal schauen was sich noch ergibt...
 
Problem "gelöst".
Ich habe das Value-Attribut gelöscht und nochmals von eingegeben. Nun geht funktioniert alles reibungslos.
Evtl. ein Bug der IDE?

Danke für deine Mühe SlaterB. 🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben