Probleme Beispiel Workshop Java EE 7

import java.util.List;

public class Aktion {
private String name;
private Double spendenZiel;
private Double spendenBetrag;
private Double bisherGespendet;
private Konto konto;
private Long id;
private List<Spende>spenden;

public Aktion(){
	konto = new Konto();
}



public String getName() {
	return name;
}


public void setName(String name) {
	this.name = name;
}


public Double getSpendenBetrag() {
	return spendenBetrag;
}


public void setSpendenBetrag(Double spendenBetrag) {
	this.spendenBetrag = spendenBetrag;
}


public Double getBisherGespendet() {
	return bisherGespendet;
}


public void setBisherGespendet(Double bisherGespendet) {
	this.bisherGespendet = bisherGespendet;
}


public Konto getKonto() {
	return konto;
}


public void setKonto(Konto konto) {
	this.konto = konto;
}


public Long getId() {
	return id;
}


public void setId(Long id) {
	this.id = id;
}


public List<Spende> getSpenden() {
	return spenden;
}


public void setSpenden(List<Spende> spenden) {
	this.spenden = spenden;
}


public Double getSpendenZiel() {
	return spendenZiel;
}


public void setSpendenZiel(Double spendenZiel) {
	this.spendenZiel = spendenZiel;
}


	
	
}

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

@SessionScoped
@Named("AktionEditController")
public class AktionEditController implements Serializable{
private static final long serialVersionUID = 2815796004558360299L;

@Inject
private AktionListProducer aktionListProducer;

private Aktion aktion;
private Mode mode;

public void setAktionToEdit(Mode mode){
	setAktionToEdit(mode, new Aktion());
}

public void setAktionToEdit(Mode mode, Aktion aktion){
	this.aktion = aktion;
	this.mode = mode;
}

public String doSave(){
	if(getMode()==Mode.ADD){
		aktionListProducer.getAktionen().add(aktion);
	}
	return Pages.AKTION_LIST;
}

public String doCancel(){
	return Pages.AKTION_LIST;
}

public String getTitle() {
	return getMode()==Mode.EDIT ? "Aktionsdaten editieren" : "Neue Aktion anlegen";
}

public AktionListProducer getAktionListProducer() {
	return aktionListProducer;
}
public void setAktionListProducer(AktionListProducer aktionListProducer) {
	this.aktionListProducer = aktionListProducer;
}
public Aktion getAktion() {
	return aktion;
}
public void setAktion(Aktion aktion) {
	this.aktion = aktion;
}
public Mode getMode() {
	return mode;
}
public void setMode(Mode mode) {
	this.mode = mode;
}


	
}

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

@SessionScoped
@Named("AktionListController")
public class AktionListController implements Serializable {
private static final long serialVersionUID = 4105912509159015L;


@Inject
private AktionEditController aktionEditController;

public String doAddAktion(){
	System.out.println("Add Aktion");
	return Pages.AKTION_EDIT;
}
public String doEditAktion(Aktion aktion){
	System.out.println("Edit Aktion"+aktion);
	return Pages.SPENDE_FORM_EDIT;
}

public String doEditSpendeForm(Aktion aktion){
	System.out.println("Edit Spende Form"+aktion);
	return Pages.SPENDE_FORM_EDIT;
}

public String doListSpende(Aktion aktion){
	System.out.println("List Spende"+aktion);
	return Pages.SPENDE_LIST;
}

public void doDeleteAktion(Aktion aktion){
	System.out.println("wird noch implementiert");
	
}




	
	
	
}

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;


@SessionScoped
@Named("AktionListProducer")
public class AktionListProducer implements Serializable {
private static final long serialVersionUID = -412412414214L;
private List<Aktion> aktionen;
public List<Aktion>getAktionen(){
	return aktionen;
}
public AktionListProducer(){
	aktionen = createMockAktionen();
}
public List<Aktion> createMockAktionen(){
Spende spende1 = new Spende();
spende1.setSpenderName("blaba");
spende1.setBetrag(2122d);
spende1.setQuittung(true);
spende1.setStatus(Status.UEBERWIESEN);
spende1.setKonto(new Konto(spende1.getSpenderName(),"xxx bank", "1313", "21414"));
List <Spende>spenden = new LinkedList<Spende>();
spenden.add(spende1);

Aktion aktion1 = new Aktion();
aktion1.setName("bla");
aktion1.setSpendenZiel(1000d);
aktion1.setBisherGespendet(200d);
aktion1.setSpendenBetrag(20d);
aktion1.setId(1L);
aktion1.setKonto(new Konto("Max Musterman","ABC", "213123","123123"));
aktion1.setSpenden(spenden);
List<Aktion>ret =new LinkedList<Aktion>();
ret.add(aktion1);
return ret;	
}

	
	
}

public class Konto {

	private String name;
	private String nameDerBank;
	private String kontoNr;
	private String blz;

	public String getName() {
		return name;
	}
	
	public Konto() {
		this(null, null, null, null);
	}
	public Konto(String name, String nameDerBank, String kontoNr, String blz) {
		
		this.name = name;
		this.nameDerBank = nameDerBank;
		this.kontoNr = kontoNr;
		this.blz = blz;
		
	}
	
	public void setName(String name) {
		this.name = name;
	}

	public String getNameDerBank() {
		return nameDerBank;
	}

	public void setNameDerBank(String nameDerBank) {
		this.nameDerBank = nameDerBank;
	}

	public String getKontoNr() {
		return kontoNr;
	}

	public void setKontoNr(String kontoNr) {
		this.kontoNr = kontoNr;
	}

	public String getBlz() {
		return blz;
	}

	public void setBlz(String blz) {
		this.blz = blz;
	}

	

	

}

public enum Mode {
EDIT, ADD
	
}

public class Pages {
public static final String AKTION_LIST="aktionList";
public static final String AKTION_EDIT="aktionEdit";
public static final String SPENDE_FORM_EDIT="spendeFormEdit";
public static final String SPENDE_LIST="spendeList";
public static final String GELD_SPENDEN="geldSpenden";

	
}

public class Spende {
	private Double betrag;
	private String spenderName;
	private Boolean quittung;
	private Status status;
	private Konto konto;

	

	public Spende() {
		this.konto = new Konto();
	}

	public Double getBetrag() {
		return betrag;
	}

	public void setBetrag(Double betrag) {
		this.betrag = betrag;
	}

	public String getSpenderName() {
		return spenderName;
	}

	public void setSpenderName(String spenderName) {
		this.spenderName = spenderName;
	}

	public Boolean getQuittung() {
		return quittung;
	}

	public void setQuittung(Boolean quittung) {
		this.quittung = quittung;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	public Konto getKonto() {
		return konto;
	}

	public void setKonto(Konto konto) {
		this.konto = konto;
	}

}

public enum Status {
	UEBERWIESEN, IN_BEARBEITUNG;
}```

```<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	template="/WEB-INF/templates/default.xhtml">
	<ui:define name="content">
		<h1>
			<h:outputText value="#{aktionEditController.title}" />
		</h1>
		<h:form acceptcharset="ISO-8859-1">
			<h:panelGrid columns="3">
				<f:facet name="header">Allgemein</f:facet>
				<h:outputLabel value="Name:" ></h:outputLabel>
				<h:inputText id="a_name" value="#{aktionEditController.aktion.name}"
					validatorMessage="Der Name einer Aktion mu min. 4 und darf max. 30 Zeichen lang sein">
					<f:validateRequired />
					<f:validateLength minimum="4" maximum="30" />
				</h:inputText>
				<h:message for="a_name" style="color: red;" />
				<h:outputLabel value="SpendenZiel:" ></h:outputLabel>
				<h:panelGroup>
					<h:inputText id="a_spendenziel"
						value="#{aktionEditController.aktion.spendenZiel}"
						validatorMessage="Das Spendenziel für die Aktion muss min. 10 Euro sein">
						<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
						<f:validateRequired />
						<f:validateDoubleRange minimum="10.0" />
					</h:inputText>EUR
				</h:panelGroup>
				<h:message for="a_spendenziel" style="color: red;" />
				<h:outputLabel value="Spendenbetrag" ></h:outputLabel>
				<h:panelGroup>
					<h:inputText id="a_spendenbetrag"
						value="#{aktionEditController.aktion.spendenBetrag}"
						validatorMessage="Der Spendenbetrag muss min 1 Euro sein">
						<f:validateRequired />
						<f:validateDoubleRange minimum="1.0" />
					</h:inputText>EUR
		 </h:panelGroup>
				<h:message for="a_spendenbetrag" style="color:red;" />
			</h:panelGrid>
			<h:panelGrid columns="3">
				<f:facet name="header">Bankverbindung</f:facet>
				<h:outputLabel value="Name:"></h:outputLabel>
				<h:inputText id="b_name"
					value="#{aktionEditController.aktion.konto.name}">
					<f:validateRequired />
				</h:inputText>
				<h:message for="b_name" style="color:red;" />
				<h:outputLabel value="Konto-Nr.:"></h:outputLabel>
				<h:inputText id="b_konto"
					value="#{aktionEditController.aktion.konto.kontoNr}">
					<f:validateRequired />
				</h:inputText>
				<h:message for="b_konto" style="color:red;" />
				<h:outputLabel value="BLZ:" />
				<h:inputText id="b_blz"
					value="#{aktionEditController.aktion.konto.blz}">
					<f:validateRequired />
				</h:inputText>
				<h:message for="b_blz" style="color:red;" />
				<h:outputLabel value="Name der bank" />
				<h:inputText id="b_name_bank"
					value="#{aktionEditController.aktion.konto.nameDerBank}">
					<f:validateRequired />
				</h:inputText>
				<h:message for="b_name_bank" style="color:red;" />
			</h:panelGrid>
			<h:commandButton action="#{aktionEditController.doSave()}"
				value="Speichern" />
			<h:commandButton action="#{aktionEditController.doCancel()}"
				value="Abbrechen" immediate="true" />
		</h:form>
	</ui:define>
</ui:composition>```
```<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	template="/WEB-INF/templates/default.xhtml">
	<ui:define name="content">
		<h1>Meine Aktionen</h1>

		<h:form acceptcharset="ISO-8859-1">
			<h:dataTable value="#{aktionListProducer.aktionen}" var="aktion">
				<h:column>
					<h:commandLink value="x"
						aktionListener="#{aktionListController.doDeleteAktion(aktion)}" />
				</h:column>
				
				<h:column>
					<f:facet name="header">
					<h:outputText value="name" />
					</f:facet>
						<h:outputText value="#{aktion.name}" />
				</h:column>
				
				<h:column>
					<f:facet name="header">
						<h:outputText value="Spendenziel" />
					</f:facet>
					<h:outputText value="#{aktion.spendenZiel}">
						<f:convertNumber type="currency" currencyCode="EUR" />
					</h:outputText>
				</h:column>
				
				<h:column>
					<f:facet name="header">
						<h:outputText value="bisher gespendet" />
					</f:facet>
					<h:outputText value="#{aktion.bisherGespendet}" >
					<f:convertNumber type="currency" currencyCode="EUR" />
					</h:outputText>
		
				</h:column>
				
				<h:column>
					<h:commandLink
						action="#{aktionListController.doEditAktion(aktion)}" value="Editiieren" />
				</h:column>
				<h:column>
					<h:commandLink action="#{aktionListController.doListSpende(aktion)}"
						value="Spendenliste" />
				</h:column>
				
				<h:column>
					<h:commandLink action="#{aktionListController.doEditSpendeForm(aktion)}"
						value="Formular" />
				</h:column>
		
			</h:dataTable>
			<h:commandButton action="#{aktionListController.doAddAktion()}"
				value="Aktion hinzufügen" />
		</h:form>
	</ui:define>
</ui:composition>

<ui:composition xlmns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	template="WEB-INF/templates/default.xhtml">
	<ui:define name="content">
Willkommen zu unserem Workshop!
</ui:define>
</ui:composition>```

Ist aus dem Buch "Workshop Java EE7 " Marcus Schießer. 

```ERROR MESSAGE: 
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: /aktionEdit.xhtml @17,92 value="#{aktionEditController.aktion.name}": Target Unreachable, identifier 'aktionEditController' resolved to null
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)

root cause

javax.el.PropertyNotFoundException: /aktionEdit.xhtml @17,92 value="#{aktionEditController.aktion.name}": Target Unreachable, identifier 'aktionEditController' resolved to null
	com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
	javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
	javax.faces.component.UIInput.validate(UIInput.java:960)
	javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
	javax.faces.component.UIInput.processValidators(UIInput.java:698)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIForm.processValidators(UIForm.java:253)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
	com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)

note The full stack trace of the root cause is available in the JBoss Web/7.0.13.Final logs.
JBoss Web/7.0.13.Final```

Wie könnt ihr mir helfen? 
Wenn jemand einen Fehler findet, teils mir mit. 
Ansonsten deployt das auch mal und sagt mir ob ihr die selbe Fehler meldung kriegt. 
Ich habs direkt aus dem Buch, wolls eigentlich nur mal komplett runter coden -.-
mfg

Welcher Server und hast du eine beans.xml?

JBOSS 7.1.1 Final.
meine Beans.xml

<!--
    JBoss, Home of Professional Open Source
    Copyright 2013, Red Hat, Inc. and/or its affiliates, and individual
    contributors by the @authors tag. See the copyright.txt in the
    distribution for a full listing of individual contributors.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<!-- This file can be an empty text file (0 bytes) -->
<!-- We're declaring the schema to save you time if you do have to configure 
    this in the future -->
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

für jede Hilfe dankbar

Erster Tip, klein anfangen und nach und nach ausbauen. Ist mir zuviel Arbeit, das alles zu importieren

Dein Problem ist du hast in der Named- Annotation

@Named("AktionListController")

alles großgeschrieben.
Wenn du es kleinschreibst oder einfach nur @Named schreibst funktioniert es. Da das Defaultverhalten den Controller klein registriert “aktionListController”.
Da du aber explizit angegeben hast, dass es großgeschrieben registriert werden soll überschreibst du damit sozusagen die Implementierung und du müsstest es in den Beans ebenfalls groß verwenden.

[QUOTE=pl4gu33]Dein Problem ist du hast in der Named- Annotation

@Named("AktionListController")

alles großgeschrieben.
Wenn du es kleinschreibst oder einfach nur @Named schreibst funktioniert es. Da das Defaultverhalten den Controller klein registriert “aktionListController”.
Da du aber explizit angegeben hast, dass es großgeschrieben registriert werden soll überschreibst du damit sozusagen die Implementierung und du müsstest es in den Beans ebenfalls groß verwenden.[/QUOTE]

Danke man. Den Fehler hab ich gestern eingebaut, als ich versucht hab eine Lösung zu finden.

/aktionEdit.xhtml @17,92 value="#{aktionEditController.aktion.name}": Target Unreachable, 'aktion' returned null
Dieser Quatch bleibt leider. Er kann nicht auf aktion.name zugreifen.

Die Aktion im aktionEditController ist null. Das heißt er versucht auf aktionEditController.aktion (null).name zuzugreifen.

Was ist wenn du Aktion aktion mit @Inject annotierst?

404 Error. Zeigt nichts mehr.

Mein Fehler, weil ich nicht darauf geachtet habe ob Aktion auch eine Bean ist. sollte es mE aber sein. Also die Klasse Aktion ebenfalls mit @Named annotieren.

Oder in einer init-Methode die Felder entsprechend initialisieren.

@PostConstruct
public void init(){
   aktion = new Aktion();
   //...
}

Wenn die Methode mit “@PostConstruct” annotier ist, wird diese Aufgerufen, bevor über die xhtml-Seite auf die Felder zu gegriffen wird.

danke Leute, für die Lösung. Hab mich so auf die richtigkeit des Buches konzentriert, dass ich nicht daran gedacht hab, was zu versuchen.

Zum Problem.

@timbeau würde funktionieren, wenn man direkt im xhtml-code die Bean mit aktion.name anspricht.
@Greta das funktioniert super. Habs eigentlich auch so gelernt.

Kann das Thema nicht als gelöst markieren, weil ich es als Unregistrierter geschrieben hab, vielleicht kann das ein Mod tun.

Hier muss halt nur eine „reset“- Methode eingeführt werden oder der Scope der Bean verändert werden. Da im Moment die alten Daten in den Objekten behalten werden, da SessionScope. (Könnte irritieren, wenn da schon Daten im Formular eingetragen sind :wink: