Hello all, I've got two @For loops inside a @Form tag. Each @For loop is printing the part of the contents of the MeterCB class, two text fields and one checkbox. During the rewind process tapestry is not recognizing the fact that checkboxes in the second @For loop are being selected.
I've already spent too much time trying to fix this problem :( has any body fixed this problem or has a work around? I've enclosed the source code ... --------------------------------------------------------------------------------------- permissions.java package com.technolog.page; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.annotations.InjectObject; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.annotations.InjectState; import org.apache.tapestry.annotations.Persist; import org.apache.tapestry.components.Block; import org.apache.tapestry.event.PageBeginRenderListener; import org.apache.tapestry.event.PageEvent; import com.technolog.UserASO; import com.technolog.component.MeterCB; import com.technolog.dao.SiteListDAO; import com.technolog.dao.UserDAO; import com.technolog.db.AUser; import com.technolog.db.Meter; public abstract class Permissions extends SecuredBasePage implements PageBeginRenderListener{ @InjectPage("Users") public abstract Users getUsersPage(); @InjectObject("spring:siteListDAO") public abstract SiteListDAO getSiteListDAO(); @InjectObject("spring:userDAO") public abstract UserDAO getUserDAO(); @InjectState("user") public abstract UserASO getUserASO(); @Persist public abstract List<MeterCB> getMetersOwnedByUser(); public abstract void setMetersOwnedByUser(List<MeterCB> list); public abstract MeterCB getMeterOwnedByUser(); public abstract MeterCB getMeterNotOwnedByUser(); @Persist public abstract List<MeterCB> getMetersNotOwnedByUser(); public abstract void setMetersNotOwnedByUser(List<MeterCB> list); @Persist public abstract AUser getUser(); public abstract void setUser(AUser user); public List<MeterCB> metersToAssign = new ArrayList<MeterCB>(0); public List<MeterCB> metersToUnAssign = new ArrayList<MeterCB>(0); public void doRemovePermissions(IRequestCycle cycle){ if (getMetersOwnedByUser()!=null) return; for (MeterCB meter : getMetersOwnedByUser()){ if (meter.getSelected()){ getUserDAO().deleteMeterFromUser(getUser().getUserId(), meter.getMeterId()); } } } public void doAddPermissions(IRequestCycle cycle){ if (getMetersNotOwnedByUser()!=null) return; for (MeterCB meter : getMetersNotOwnedByUser()){ if (meter.getSelected()){ getUserDAO().addMeterToUser(getUser().getUserId(), meter.getMeterId()); } } } public void doPrevPage(IRequestCycle cycle){ cycle.activate(getUsersPage() ); } public boolean containsMeter(List<Meter> meters, long meterId){ for (Meter meter : meters){ if (meter.getMeterId()==meterId){ return true; } } return false; } public List<Meter> getDifference(List<Meter> meters, List<Meter> meters2){ List<Meter> differenceList = new Vector<Meter>(0); for (Meter meter : meters){ if (containsMeter(meters2, meter.getMeterId())){ } else { differenceList.add(meter); } } return differenceList; } public void pageBeginRender(PageEvent event){ if (!event.getRequestCycle().isRewinding()){ List<Meter> notOwnedMetersList = getSiteListDAO().GetCompleteUserSiteList(); List<Meter> ownedMetersList = getSiteListDAO().GetUserSiteList(getUser().getUserName()); //notOwnedMetersList.removeAll(ownedMetersList); notOwnedMetersList = getDifference(notOwnedMetersList, ownedMetersList); List<MeterCB> metersNotOwnedByUser = new Vector<MeterCB>(0); for (Meter meter: notOwnedMetersList){ metersNotOwnedByUser.add(new MeterCB(meter, false)); } setMetersNotOwnedByUser(metersNotOwnedByUser); List<MeterCB> metersOwnedByUser = new Vector<MeterCB>(0); for (Meter meter: ownedMetersList){ metersOwnedByUser.add(new MeterCB(meter, false)); } setMetersOwnedByUser(metersOwnedByUser); } else { System.out.println("rewinding..."); metersToAssign.clear(); metersToUnAssign.clear(); } System.out.println("fire"); } public Block getMetersOwned(){ return (Block)getComponent("metersOwnedBlock"); } public Block getMetersNotOwned(){ return (Block)getComponent("metersNotOwnedBlock"); } public void unAssignedSiteListener(IRequestCycle cycle){ if (cycle.isRewinding()){ MeterCB meter = getMeterNotOwnedByUser(); if (!meter.getSelected()) return; metersToAssign.add(meter); System.out.println("assigned "+meter.getMeterId()); } } public void assignedSiteListener(IRequestCycle cycle){ if (cycle.isRewinding()){ MeterCB meter = getMeterOwnedByUser(); if (!meter.getSelected()) return; metersToUnAssign.add(meter); System.out.println("uassigned "+meter.getMeterId()); } } } permissions.page <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE page-specification PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN" "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd"> <page-specification class="com.technolog.page.Permissions"> <component id="form" type="Form"/> <component id="border" type="Border"/> <component id="showMetersOwned" type="RenderBlock"> <binding name="block" value="metersOwned"/> </component> <component id="showMetersNotOwned" type="RenderBlock"> <binding name="block" value="metersNotOwned"/> </component> <component id="metersOwned" type="For"> <binding name="source" value="metersOwnedByUser"/> <binding name="value" value="meterOwnedByUser"/> <binding name="element" value="literal:tr"/> </component> <component id="metersNotOwned" type="For"> <binding name="source" value="metersNotOwnedByUser"/> <binding name="value" value="meterNotOwnedByUser"/> <binding name="element" value="literal:tr"/> </component> <component id="metersOwnedBlock" type="Block"/> <component id="metersNotOwnedBlock" type="Block"/> <component id="prev" type="DirectLink"> <binding name="listener" value="listener:doPrevPage"/> </component> <component id="removeMeters" type="Submit"> <binding name="listener" value="listener:doRemovePermissions"/> </component> <component id="addMeters" type="Submit"> <binding name="listener" value="listener:doAddPermissions"/> </component> <component id="mpanMetersNotOwned" type="Insert"> <binding name="value" value="meterNotOwnedByUser.mpan"/> </component> <component id="meterIdMetersNotOwned" type="Insert"> <binding name="value" value="meterNotOwnedByUser.meterId"/> </component> <component id="mpanMetersOwned" type="Insert"> <binding name="value" value="meterOwnedByUser.mpan"/> </component> <component id="meterIdMetersOwned" type="Insert"> <binding name="value" value="meterOwnedByUser.meterId"/> </component> <component id="selectedMetersNotOwned" type="Checkbox"> <binding name="value" value="meterNotOwnedByUser.selected"/> </component> <component id="selectedMetersOwned" type="Checkbox"> <binding name="value" value="meterOwnedByUser.selected"/> </component> <component id ="unAssignedSitesListener" type="InvokeListener"> <binding name="listener" value="listener:unAssignedSiteListener"/> </component> <component id="assignedSitesListener" type="InvokeListener"> <binding name="listener" value="listener:assignedSiteListener"/> </component> </page-specification> --------------------------------------------------------------------------------------------------------------------- permissions.html <html> <head > <title>title</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <body> <span jwcid="$content$"> <span jwcid="border"> <form jwcid="form"> <table> <tr valign="top"><td><span jwcid="showMetersNotOwned"/></td><td align="center"><input jwcid="addMeters" type="submit" value="Add Meter"/><br/><br/><input jwcid="removeMeters" type="submit" value="Remove Meter"/></td><td><span jwcid="showMetersOwned"/></td></tr> </table> </form> <a jwcid="prev" href="">Prev</a> <span jwcid="metersNotOwnedBlock"> <b>Meters not assigned</b><br/> <table> <tr jwcid="metersNotOwned" > <td><span jwcid="mpanMetersNotOwned"/></td> <td><span jwcid="meterIdMetersNotOwned"/></td> <td><input jwcid="selectedMetersNotOwned" type="checkbox"/></td> <span jwcid="unAssignedSitesListener"/> </tr> </table> </span> <span jwcid="metersOwnedBlock"> <b>Meters already assigned</b><br/> <table> <tr jwcid="metersOwned"> <td><span jwcid="mpanMetersOwned"/></td> <td><span jwcid="meterIdMetersOwned"/></td> <td><input jwcid="selectedMetersOwned" type="checkbox"/></td> <span jwcid="assignedSitesListener"/> </tr> </table> </span> </span> </span> </body> </html> ---------------------------------------------------------------------------------------------------------------------- meterCB.java package com.technolog.component; import java.io.Serializable; import com.technolog.db.Meter; public class MeterCB extends Meter implements Serializable{ /** * */ private static final long serialVersionUID = -3502445516008868262L; private Boolean selected = false; /** * * @param meterId * @param mpan * @param meterName * @param demoMeter * @param readerType * @param industry * @param tamper * @param selected */ public MeterCB(long meterId, long mpan, String meterName, byte demoMeter, short readerType, short industry, Boolean tamper, Boolean selected) { super(meterId, mpan, meterName, demoMeter, readerType, industry, tamper); this.selected = selected; } /** * * @param meter */ public MeterCB(Meter meter){ super(meter.getMeterId(), meter.getMpan(), meter.getMeterName(), meter.getDemoMeter(), meter.getReaderType(), meter.getIndustry(), meter.getTamper()); selected = false; } /** * * @param meter * @param selected */ public MeterCB(Meter meter, Boolean selected){ super(meter.getMeterId(), meter.getMpan(), meter.getMeterName(), meter.getDemoMeter(), meter.getReaderType(), meter.getIndustry(), meter.getTamper()); this.selected = selected; } public Boolean getSelected() { return selected; } public void setSelected(Boolean selected) { this.selected = selected; } } -- Thanks A Jabbar Azam --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]