x:dataTabel not displaying the correct values
---------------------------------------------
Key: MYFACES-729
URL: http://issues.apache.org/jira/browse/MYFACES-729
Project: MyFaces
Type: Bug
Versions: 1.1.1
Environment: Tomcat 5.5.2, JDK 1.5
Reporter: Luis
I have a simple JSP with an x:dataTable component on it. The dataTable gets
its value from a LinkedList. Every time I add a value to the list (ex. class
with an open & end date), the values of my previous elements are changed after
the refresh. The action of adding or deleting an element is subtracting 1 to
the existing elements (dates) in the list. This used to work fine in 1.0.9 or
before
___________________
JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" errorPage="/jsp/ErrorPage.jsp"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%>
<HTML>
<!--
/*
*
*
*
*
*
*
*
*/
-->
<!--
managed beans used:
-->
<BODY>
<f:view>
<h:form id="testForm">
<h:panelGrid columns="2" border="0" cellpadding="0"
cellspacing="0"
columnClasses="ColumnTop" style="width: 250px">
<h:panelGroup>
<h:inputText size="5" styleClass="DataField"
id="daysToFill"
value="#{test.daySet}"
maxlength="2">
<f:validateLongRange minimum="1"
maximum="99" />
</h:inputText>
<h:commandButton
action="#{test.actionAddDay}"
alt="Add Period" value="Add"
image="images/add_button.gif" type="submit"/>
</h:panelGroup>
<h:panelGroup></h:panelGroup>
<h:panelGroup>
<h:panelGrid border="0" cellpadding="0"
cellspacing="0"
columnClasses="DataField">
<x:dataTable id="daysToFillTable"
width="100%" cellpadding="4"
value="#{test.daysToFillList}"
var="item"
headerClass="tablesHeader" footerClass="tablesFooter"
rowClasses="tablesEvenRow,tablesOddRow" rows="100"
rowIndexVar="index">
<h:column>
<h:outputText
value="#{index+1}" styleClass="DataHead" />
</h:column>
<h:column>
<h:commandButton
action="#{test.actionDeleteDay}"
alt="Remove
Period" value="Delete"
image="images/remove_button.gif" rendered="true" />
</h:column>
<h:column>
<h:panelGrid
columns="1">
<h:outputText
value="Open Date (MM/DD/YYYY)"
styleClass="DataHead" />
<h:inputText
styleClass="DateField" id="openDate"
onchange="isDate(this.value)" maxlength="10"
value="#{item.openDate}" size="15">
<f:convertDateTime pattern="MM/dd/yyyy" />
</h:inputText>
<h:outputText
value="End Date (MM/DD/YYYY)"
styleClass="DataHead" />
<h:inputText
styleClass="DateField" id="endDate"
onchange="isDate(this.value)" value="#{item.endDate}" size="15"
maxlength="10">
<f:convertDateTime pattern="MM/dd/yyyy" />
</h:inputText>
</h:panelGrid>
</h:column>
</x:dataTable>
</h:panelGrid>
</h:panelGroup>
</h:panelGrid>
</h:form>
</f:view>
</BODY>
</HTML>
___________________
CLASSES
package org.test.hrstats.handler.dataentry;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.test.hrstats.data.DaysToFill;
//***********************************************************
/*
* Description:
*
* @author Luis Roche
* @version 1.0, 4/20/2005
*/
//***********************************************************
public class TurnoverPositionDetailHandler {
static final long serialVersionUID = -5929348060779437941L;
private DataModel daysToFillDataModel = null;
private int daySet = 5;
private List daysToFill = null;
/**
* TurnoverPositionDetailHandler
*/
public TurnoverPositionDetailHandler() {
super();
}
/**
* @see org.chi.model.CHIHandler#actionAdd()
*/
public String actionAddDay() {
DaysToFill d = null;
Calendar selectedDate = GregorianCalendar.getInstance();
selectedDate.set(Calendar.YEAR, Integer.parseInt("2005"));
selectedDate.set(Calendar.MONTH, 10);
selectedDate.set(Calendar.DAY_OF_MONTH,
selectedDate.getActualMaximum(Calendar.DAY_OF_MONTH));
selectedDate.set(Calendar.HOUR, 0);
selectedDate.set(Calendar.MINUTE, 0);
selectedDate.set(Calendar.SECOND, 0);
for (int i = 0; i < this.daySet; i++) {
// add new record to collection
d = new DaysToFill();
// end date
d.setEndDate(selectedDate.getTime());
// open date
selectedDate.set(Calendar.DAY_OF_MONTH,
selectedDate.getActualMinimum(Calendar.DAY_OF_MONTH));
d.setOpenDate(selectedDate.getTime());
this.getDaysToFill().add(d);
}
return null;
}
/**
* @see org.chi.model.CHIHandler#actionDelete()
*/
public String actionDeleteDay() {
DaysToFill row = (DaysToFill) this.daysToFillDataModel.getRowData();
this.getDaysToFill().remove(row);
return null;
}
/**
* getDaysToFill
* @return DataModel
*/
public DataModel getDaysToFillList() {
this.daysToFillDataModel = new ListDataModel(this.getDaysToFill());
return this.daysToFillDataModel;
}
/**
* getDaySet
* @return int
*/
public int getDaySet() {
return this.daySet;
}
/**
* setDaySet
* @param daySet int
*/
public void setDaySet(int daySet) {
this.daySet = daySet;
}
/**
* getDaysToFill
* @return List
*/
public List getDaysToFill() {
if (this.daysToFill == null) {
this.daysToFill = new LinkedList();
}
return this.daysToFill;
}
public void setDaysToFill(List daysToFill) {
this.daysToFill = daysToFill;
}
}
package org.test.hrstats.data;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
//***********************************************************
/* Description:
*
* @author Luis Roche
* @version 1.0, 5/5/2005
*/
//***********************************************************
public class DaysToFill {
static final long serialVersionUID = -684725653790217867L;
private int daysToFillId = 0;
private Date endDate = null;
private Date openDate = null;
/**
* DaysToFill
*/
public DaysToFill() {
super();
this.openDate = this.removeTimeFromDate(new Date());
this.endDate = this.removeTimeFromDate(new Date());
}
/**
* DaysToFill
* @param id int
*/
public DaysToFill(int id) {
this();
this.daysToFillId = id;
}
/**
* getDaysToFillId
* @return int
*/
public int getDaysToFillId() {
return this.daysToFillId;
}
/**
* getEndDate
* @return Date
*/
public Date getEndDate() {
if (this.endDate != null) {
this.endDate = removeTimeFromDate(this.endDate);
}
return this.endDate;
}
/**
* getOpenDate
* @return Date
*/
public Date getOpenDate() {
if (this.openDate != null) {
this.openDate = removeTimeFromDate(this.openDate);
}
return this.openDate;
}
/**
* removeTimeFromDate
* @param date Date
* @return Date
*/
private final Date removeTimeFromDate(Date date) {
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
return c.getTime();
}
/**
* setDaysToFillId
* @param id int
*/
public void setDaysToFillId(int id) {
this.daysToFillId = id;
}
/**
* setEndDate
* @param date Date
*
*/
public void setEndDate(Date date) {
if (date != null) {
date = removeTimeFromDate(date);
}
this.endDate = date;
}
/**
* setOpenDate
* @param date Date
*/
public void setOpenDate(Date date) {
if (date != null) {
date = removeTimeFromDate(date);
}
this.openDate = date;
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira