Hello,
I have a overview page with a dataTable-Component and a commandButton for each
row, to get to a detail page for the corresponding value. Since migration to
myfaces-1.1.0 this is not working any longer.
If I put the ManagedBean of my dataTable in session Scope, I have the values
of the table available, but if I do a
data.getRowData();
I always get the last row.
If I put the ManagedBean in request Scope the List which holds the data is set
to null, even if I use preserveDataModel = true.
Here my faces-config NOT complete:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces
Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<!-- =========== FULL CONFIGURATION FILE ==================================
-->
<faces-config>
<managed-bean>
<managed-bean-name>weekoverviewForm</managed-bean-name>
<managed-bean-class>trainingweb.forms.WeekOverview</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>successOneWeek</from-outcome>
<to-view-id>/showOneWeek.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<application>
<view-handler>org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl</view-handler>
<locale-config/>
</application>
<lifecycle/>
<factory/>
</faces-config>
The code inside the managed Bean:
/*
* Created on 31.10.2004
*
* Wird aufgerufen um alle Wochen eines Jahresplanes anzuzeigen
*/
package trainingweb.forms;
import java.util.*;
import javax.faces.application.Application;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpServletRequest;
import trainingweb.business.BusinessDelegateFactory;
import trainingweb.business.IBusinessDelegate;
import trainingextern.data.User;
import trainingextern.data.WeeklyData;
/**
* @author stingray
*
*
*/
public class WeekOverview {
private DataModel weeks = new ListDataModel();
private String summe = new String();
/**
*
*/
public WeekOverview() {
super();
}
public DataModel getWeeks() {
if (weeks.getWrappedData() == null) {
this.getData();
}
return weeks;
}
/**
* Nach Klick auf "Show" in der Jahresplanübersicht wird diese Methode
* aufgerufen Die Methode setzt den Parameter wochenID auf der OneWeek
die
* angezeigt werden soll! Anschliessend geht es über eine NavRule zur
* OneWeek
*
* @return
*/
public String goOneWeek() {
FacesContext fcontext = FacesContext.getCurrentInstance();
Application app = fcontext.getApplication();
if ( weeks.getWrappedData() == null ) {
this.getData();
}
WeeklyData weeky = (WeeklyData) weeks.getRowData();
int wochenID = Integer.parseInt(weeky.getNummer());
OneWeek binding = (OneWeek) app.createValueBinding("#{oneWeek}")
.getValue(fcontext);
binding.setWochenID(wochenID);
return "successOneWeek";
}
/**
* @return Returns the summe.
*/
public String getSumme() {
if (weeks.getWrappedData() == null ) { // before upgrading to
1.1.0 this was
also not necessary, as always the getWeeks() function was called first.
this.getData();
}
float sum = 0;
Vector erg = (Vector) weeks.getWrappedData();
Iterator i = erg.iterator();
while (i.hasNext()) {
WeeklyData data = (WeeklyData) i.next();
sum += new Float(data.getKm()).floatValue();
}
summe = Float.toString(sum);
return summe;
}
private void getData() {
FacesContext fcontext = FacesContext.getCurrentInstance();
ExternalContext ext = fcontext.getExternalContext();
HttpServletRequest request = (HttpServletRequest)
ext.getRequest();
Application app = fcontext.getApplication();
User myUser = (User) app.createValueBinding("#{User}").getValue(
fcontext);
BusinessDelegateFactory fact = BusinessDelegateFactory
.getInstance(request.getSession());
IBusinessDelegate delegate = fact.getBusinessDelegate();
Vector erg = delegate.getWeeklyPensum(myUser.getName(), myUser
.getJahresplan());
weeks.setWrappedData(erg);
}
}
And the jsp:
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="x"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:loadBundle basename="java.resources.application" var="messages"/>
<h:form id="inputForm">
<f:verbatim><p></f:verbatim>
<h:outputFormat id="hello" value="#{messages['main.title']}" />
<f:verbatim></p></f:verbatim>
<h:panelGroup id="body">
<x:dataTable id="table"
styleClass="standardTable"
headerClass="standardTable_Header"
footerClass="standardTable_Footer"
rowClasses="standardTable_Row1,standardTable_Row2"
columnClasses="standardTable_ColumnRight,standardTable_ColumnCentered,standardTable_ColumnCentered,standardTable_ColumnCentered,standardTable_ColumnCentered"
var="week"
value="#{weekoverviewForm.weeks}"
preserveDataModel="true" >
<h:column>
<f:facet name="header">
<h:outputText value="#{messages['week.column1']}"/>
</f:facet>
<h:outputText value="#{week.startdatum}" />
<f:verbatim> - </f:verbatim>
<h:outputText value="#{week.enddatum}" />
<f:facet name="footer">
<h:outputText value="#{messages['week.sum']}"/>
</f:facet>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{messages['week.column2']}"/>
</f:facet>
<h:outputText value="#{week.sollStd}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{messages['week.column3']}"/>
</f:facet>
<h:outputText value="#{week.istStd}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{messages['week.column4']}"/>
</f:facet>
<h:outputText value="#{week.km}" />
<f:facet name="footer">
<h:outputText value="#{weekoverviewForm.summe}"/>
</f:facet>
</h:column>
<h:column>
<h:commandButton value="Show"
action="#{weekoverviewForm.goOneWeek}"/>
</h:column>
</x:dataTable>
</h:panelGroup>
</h:form>
Best regards
Thomas