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

Reply via email to