# Frage zu DataModel, DataModelSelection und Seam



## d.ausstroit (11. Apr 2008)

Moin,
ich habe ein Problem mit der Componente @DataModel und @DataModelSelection. Ich bekomme meine Daten aus einer EJB3-Bean aus dem JBoss-AS und zeige sie mit einer JSF-Seite an. Dort benutze ich "h:dataTable". Das klappt alles wunderbar. Nun möchte ich aber auf einen ausgwählten Kunden zugreifen und diesen bearbeiten. Ich habe das so verstanden, dass dieser sich dann unter @DataModelSelection stehenden Variablen befindet und ich in verändern kann.

Hier mal ein Bischen Code:


```
@Stateful
@Name("kundehdl")
public class KundeHandler implements KundeHandlerLocal {

private Kunde kunde; // EJB3-Bean

@Logger
private Log log;

@EJB
private ToolRemote toolbean; // EJB3-Bean

@DataModel
private List<Kunde> kunden;
@DataModelSelection
private Kunde selectedKunde;


// Hier suche ich nach der Kundennummer (z.B. 2,3,45)
public String suchenKdNr() {

int ret = 0;

if (suchNr == "") {
FacesMessages.instance().add(
"Kunden-Nummer wird zur Suche benötigt!");
} else {
try {
ret = toolbean.selectKundeDB(suchNr);
kunden = toolbean.getResultList();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(ret);
return "";
}

public String bearbeiten() {
log.info("bearbeiten() mit " + selectedKunde.getNachname() + " aufgerufen");
return "/bearbeiten.xhtml";
}
```
Nach der Suche werden alle Kunden in der JSF-Seite angezeigt. Nun möchte ich einen Einzelnen bearbeiten. 

Hier der Ausschnitt der JSF-Seite.

```
<h:outputText value="Keine Daten gefunden" rendered="#{empty kundehdl.kunden}"/>
<h:dataTable value="#{kundehdl.kunden}" var="kunde" 
rendered="#{!empty kundehdl.kunden}"
headerClass="usrDataHeader"
rowClasses="usrDataRow1,usrDataRow2"
columnClasses="usrDataColKdNr,usrDataColName,usrDataColStr,usrDataColPlz,usrDataColOrt">
<h:column>
<f:facet name="header"> 
<h:outputLabel value="KdNr"/>
</f:facet> 
<h:outputText value="#{kunde.kunden_Nr}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="Name"/>
</f:facet>
<h:outputText value="#{kunde.lang_Name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="Straße"/>
</f:facet>
<h:outputText value="#{kunde.strasse_Hsnr}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="Plz"/>
</f:facet>
<h:outputText value="#{kunde.plz}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="Ort"/>
</f:facet>
<h:outputText value="#{kunde.ort}" />
</h:column>

<h:column>
<s:button value="Bearbeiten" action="#{kundehdl.bearbeiten}" styleClass="usrFormSubmitBearbeiten" /> 
</h:column>
</h:dataTable>
```
Nach dem Betätigen des Buttons bekomme ich in der Bearbeiten-Funkion eine NullPointer-Exc. Und das verstehe ich nicht.

Ich hoffe mir kann jemand helfen. Ich komme absolut nicht weiter. Danke im voraus. 

AudiCamper

PS: Ich habe die gleiche Frage auch schon im JSF-Forum gestellt, aber bisher noch keine Antwort erhalten. Es ist schon ein bischen dringend.


----------



## frankybaby (14. Apr 2008)

Hi, 

hab jetzt nicht sooo tief draufgeschaut. Aber vermtlich solltest Du dem Kundenhandler noch einen Scope geben.

@Stateful 
@Name("kundehdl") 
@Scope (ScopeType.SESSION)
public class KundeHandler implements KundeHandlerLocal { 
...

dann sollte das auch funktionieren!

Viel Spaß noch mit SEAM
Frankybaby


----------



## d.ausstroit (16. Apr 2008)

Hai frankybaby,

sorry, dass ich mich jetzt erst melde. Ich hatte Urlaub. Ich werde das mit dem Scope mal ausprobieren und mich noch einmal melden.

d.ausstroit


----------



## d.ausstroit (18. Apr 2008)

Hallo frankybaby,

durch Deinen Tip bekomme ich nun keine Null-Pointer-Exc. mehr. Allerdings werden immer nur die Daten des ersten Datensatzes angezeigt. 

Bitte melde Dich doch noch einmal.

Oder vielleicht kann mir jemand anderes helfen   

d.ausstroit


----------

