Josh, I checked out 4.1.3 and built/deployed/installed it to my local repo. Then I re-generated all the eclipse projects for this 4.1.3 tapestry and imported them into my workspace.
How do you integrate tapestry source step/debugging into eclipse? When I set a breakpoint on a source module, nothing happens. I am launching jetty under eclipse's external tools dialog. I am finding alot of things that do not work surrounding the propertyselect including the invocation of listener methods with the "do" prefix. persistent properties, parameters... not fun stuff. I can go it alone in the debugger and provide feedback on this release. Thanks for any tips... BTW: irc is banned where I work Best regards Ken in nashua From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Thu, 11 Oct 2007 14:05:55 -0400 Attempts to model the solution below using @Persist in the JAVA defaulting to session never worked. Best regards Ken in nashua From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Thu, 11 Oct 2007 12:40:18 -0400 Well I finally got something to stick... <property name="tableSize" persist="session"/> <property name="pagingSpan" persist="session"/> I eliminated all references from Home.html since these parameters are self contained inside Gallery widget... why pollute the upper level container component and violate separation of concerns anyway. But this solution is flakey. I change the selection and the PropertySelect updates whacky... sometimes it changes other times it doesn't then other times it never changes. I am using a @Block to model the thing... and using multiple instances of that block <div jwcid="@RenderBlock" block="ognl:components.autoPagingContent"/> <div jwcid="@RenderBlock" block="ognl:components.collectionContent"/> <div jwcid="@RenderBlock" block="ognl:components.autoPagingContent"/> autoPagingContent is the guy... I am going to set the ID's on the following explicitly... <td width="25%" align="left" NOWRAP> <span jwcid="@Insert" value="Table Size"/> <select jwcid="tableSizeSelect"/> <span jwcid="@Insert" value="Paging Span"/> <select jwcid="pagingSpanSelect"/> </td> Best regards Ken in nashua From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Thu, 11 Oct 2007 12:15:11 -0400 An exception has occurred. You may continue by restarting the session. [ +/- ] Exception: A binding for parameter 'value' of component Home/galleryWidget.tableSizeSelect in the template for Home/galleryWidget conflicts with an existing binding in the specification. org.apache.hivemind.ApplicationRuntimeException A binding for parameter 'value' of component Home/galleryWidget.tableSizeSelect in the template for Home/galleryWidget conflicts with an existing binding in the specification. component: [EMAIL PROTECTED]/galleryWidget.tableSizeSelect] location: classpath:/org/trails/demo/components/Gallery.html, line 8 3 <span jwcid="[EMAIL PROTECTED]"> 4 <table width="100%" border=1> 5 <tr> 6 <td width="25%" align="left" NOWRAP> 7 <span jwcid="@Insert" value="Table Size"/> 8 <select jwcid="tableSizeSelect" value="ognl:tableSize" onchange="tapestry.form.refresh(this.form)"/> 9 <span jwcid="@Insert" value="Paging Span"/> 10 <select jwcid="pagingSpanSelect" value="ognl:pagingSpan" onchange="tapestry.form.refresh(this.form)"/> 11 </td> 12 <td align="left" NOWRAP> 13 <a jwcid="@DirectLink" listener="listener:onBegin" style="fontSize:15px;"> <span jwcid="@Insert" value="<<"/> </a> Stack Trace: org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.validate(ComponentTemplateLoaderLogic.java:380) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.addBinding(ComponentTemplateLoaderLogic.java:320) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.addTemplateBindings(ComponentTemplateLoaderLogic.java:285) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.process(ComponentTemplateLoaderLogic.java:182) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.process(ComponentTemplateLoaderLogic.java:98) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.loadTemplate(ComponentTemplateLoaderLogic.java:75) org.apache.tapestry.services.impl.ComponentTemplateLoaderImpl.loadTemplate(ComponentTemplateLoaderImpl.java:60) $ComponentTemplateLoader_1158fd8227e.loadTemplate($ComponentTemplateLoader_1158fd8227e.java) org.apache.tapestry.pageload.PageLoader.loadTemplateForComponent(PageLoader.java:673) org.apache.tapestry.BaseComponent.readTemplate(BaseComponent.java:92) org.apache.tapestry.BaseComponent.finishLoad(BaseComponent.java:122) $Gallery_17.finishLoad($Gallery_17.java) org.apache.tapestry.pageload.PageLoader.constructComponent(PageLoader.java:408) org.apache.tapestry.pageload.PageLoader.createImplicitComponent(PageLoader.java:504) $IPageLoader_1158fd82272.createImplicitComponent($IPageLoader_1158fd82272.java) $IPageLoader_1158fd82273.createImplicitComponent($IPageLoader_1158fd82273.java) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.createImplicitComponent(ComponentTemplateLoaderLogic.java:203) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.process(ComponentTemplateLoaderLogic.java:158) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.process(ComponentTemplateLoaderLogic.java:98) org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.loadTemplate(ComponentTemplateLoaderLogic.java:75) org.apache.tapestry.services.impl.ComponentTemplateLoaderImpl.loadTemplate(ComponentTemplateLoaderImpl.java:60) $ComponentTemplateLoader_1158fd8227f.loadTemplate($ComponentTemplateLoader_1158fd8227f.java) $ComponentTemplateLoader_1158fd8227e.loadTemplate($ComponentTemplateLoader_1158fd8227e.java) org.apache.tapestry.pageload.PageLoader.loadTemplateForComponent(PageLoader.java:673) org.apache.tapestry.BaseComponent.readTemplate(BaseComponent.java:92) org.apache.tapestry.BaseComponent.finishLoad(BaseComponent.java:122) $Home_0.finishLoad($Home_0.java) org.apache.tapestry.pageload.PageLoader.constructComponent(PageLoader.java:408) org.apache.tapestry.pageload.PageLoader.loadPage(PageLoader.java:639) $IPageLoader_1158fd82272.loadPage($IPageLoader_1158fd82272.java) $IPageLoader_1158fd82273.loadPage($IPageLoader_1158fd82273.java) org.apache.tapestry.pageload.PageSource.makeObject(PageSource.java:153) org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:797) org.apache.tapestry.pageload.PageSource.getPage(PageSource.java:177) $IPageSource_1158fd821c6.getPage($IPageSource_1158fd821c6.java) $IPageSource_1158fd821c5.getPage($IPageSource_1158fd821c5.java) org.apache.tapestry.engine.RequestCycle.loadPage(RequestCycle.java:239) org.apache.tapestry.engine.RequestCycle.getPage(RequestCycle.java:226) org.apache.tapestry.engine.RequestCycle.activate(RequestCycle.java:559) org.apache.tapestry.engine.HomeService.service(HomeService.java:66) $IEngineService_1158fd82254.service($IEngineService_1158fd82254.java) org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:77) org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:72) org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:241) org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54) $WebRequestServicer_1158fd8222d.service($WebRequestServicer_1158fd8222d.java) org.trails.i18n.LocaleFilter.service(LocaleFilter.java:26) $WebRequestServicerFilter_1158fd8222b.service($WebRequestServicerFilter_1158fd8222b.java) $WebRequestServicer_1158fd8222f.service($WebRequestServicer_1158fd8222f.java) $WebRequestServicer_1158fd82227.service($WebRequestServicer_1158fd82227.java) org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:61) $ServletRequestServicer_1158fd8220d.service($ServletRequestServicer_1158fd8220d.java) org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55) $ServletRequestServicerFilter_1158fd82209.service($ServletRequestServicerFilter_1158fd82209.java) $ServletRequestServicer_1158fd8220f.service($ServletRequestServicer_1158fd8220f.java) org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52) $ServletRequestServicerFilter_1158fd82207.service($ServletRequestServicerFilter_1158fd82207.java) $ServletRequestServicer_1158fd8220f.service($ServletRequestServicer_1158fd8220f.java) org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53) $ServletRequestServicerFilter_1158fd8220b.service($ServletRequestServicerFilter_1158fd8220b.java) $ServletRequestServicer_1158fd8220f.service($ServletRequestServicer_1158fd8220f.java) $ServletRequestServicer_1158fd82201.service($ServletRequestServicer_1158fd82201.java) org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:126) org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:103) javax.servlet.http.HttpServlet.service(HttpServlet.java:740) javax.servlet.http.HttpServlet.service(HttpServlet.java:853) org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:491) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1074) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065) org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107) org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.trails.security.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:145) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:229) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:286) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065) org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365) org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:185) org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:689) org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:391) org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:146) org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) org.mortbay.jetty.Server.handle(Server.java:285) org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:457) org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:751) org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:500) org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209) org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357) org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:329) org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475) Best regards Ken in nashua From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Thu, 11 Oct 2007 11:55:34 -0400 An exception has occurred. You may continue by restarting the session. [ +/- ] Exception: Unable to update OGNL expression '<parsed OGNL expression>' of [EMAIL PROTECTED]/galleryWidget] to 2: Binding with value 1 (StaticBinding[1]) may not be updated. org.apache.tapestry.BindingException Unable to update OGNL expression '<parsed OGNL expression>' of [EMAIL PROTECTED]/galleryWidget] to 2: Binding with value 1 (StaticBinding[1]) may not be updated. binding: ExpressionBinding[Home/galleryWidget tableSize] location: classpath:/org/trails/demo/components/Gallery.jwc, line 9, column 46 4 allow-informal-parameters="yes"> 5 <parameter name="autoPagingContent"/> 6 <parameter name="collectionContent"/> 7 8 <component id="tableSizeSelect" type="PropertySelection"> 9 <binding name="value" value="tableSize"/> 10 <binding name="model" value="tableSizeModel"/> 11 </component> 12 13 <component id="pagingSpanSelect" type="PropertySelection"> 14 <binding name="value" value="pagingSpan"/> [ +/- ] Exception: Unable to update OGNL expression '<parsed OGNL expression>' of [EMAIL PROTECTED]/galleryWidget] to 2: Binding with value 1 (StaticBinding[1]) may not be updated. org.apache.hivemind.ApplicationRuntimeException Unable to update OGNL expression '<parsed OGNL expression>' of [EMAIL PROTECTED]/galleryWidget] to 2: Binding with value 1 (StaticBinding[1]) may not be updated. component: [EMAIL PROTECTED]/galleryWidget] location: context:/WEB-INF/Home.html, line 9 4 <div id="page.title"> 5 <span jwcid="@Insert" value="Listings"/> 6 </div> 7 </h1> 8 9 <div jwcid="[EMAIL PROTECTED]:Gallery" 10 collectionType="ognl:@[EMAIL PROTECTED]" 11 component="galleryWidget" 12 collectionContent="collectionContent" 13 autoPagingContent="autoPagingContent" 14 tableSize="1" [ +/- ] Exception: Binding with value 1 (StaticBinding[1]) may not be updated. Best regards Ken in nashua From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Thu, 11 Oct 2007 11:49:25 -0400 An exception has occurred. You may continue by restarting the session. [ +/- ] Exception: Unable to parse OGNL expression '(index % tableSize) == 0': For input string: "tableSize" org.apache.tapestry.BindingException Unable to parse OGNL expression '(index % tableSize) == 0': For input string: "tableSize" binding: ExpressionBinding[Home/galleryWidget (index % tableSize) == 0] location: classpath:/org/trails/demo/components/Gallery.html, line 32 27 <span jwcid="[EMAIL PROTECTED]"> 28 <table width="100%"> 29 <tr> 30 <span jwcid="[EMAIL PROTECTED]" source="ognl:collection" value="ognl:currentObject" index="ognl:index"> 31 <span jwcid="@If" condition="ognl:tableSize"> 32 <span jwcid="@If" condition="ognl:(index % tableSize) == 0"> 33 <span jwcid="@Insert" value="</tr><tr>" raw="true"/> 34 </span> 35 </span> 36 <td> 37 <a jwcid="[EMAIL PROTECTED]" listener="listener:edit" parameters="ognl:currentObject"> [ +/- ] Exception: Unable to parse OGNL expression '(index % tableSize) == 0': For input string: "tableSize" org.apache.hivemind.ApplicationRuntimeException Unable to parse OGNL expression '(index % tableSize) == 0': For input string: "tableSize" [ +/- ] Exception: For input string: "tableSize" java.lang.NumberFormatException For input string: "tableSize" Stack Trace: java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) java.lang.Long.parseLong(Long.java:403) java.lang.Long.parseLong(Long.java:461) ognl.OgnlOps.longValue(OgnlOps.java:220) ognl.OgnlOps.remainder(OgnlOps.java:932) ognl.ASTRemainder.getValueBody(ASTRemainder.java:51) ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:202) ognl.SimpleNode.getValue(SimpleNode.java:246) ognl.ASTEq.getValueBody(ASTEq.java:50) ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:202) ognl.SimpleNode.getValue(SimpleNode.java:246) ognl.Ognl.getValue(Ognl.java:494) ognl.Ognl.getValue(Ognl.java:458) org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression(HiveMindExpressionCompiler.java:153) ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:523) ognl.Ognl.compileExpression(Ognl.java:141) Best regards Ken in nashua From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Thu, 11 Oct 2007 09:49:01 -0400 Hi Nick, Attached is my Home.html... Home.java The other modules are original as posted yesterday the same. I basically specified the parameter bindings in the template at the widget definition. The select component keeps punching back to 1 when I attempt to change. I even added getter/setter to Home.JAVA for the parameters. Home.JAVA @Persist public abstract String getTableSize(); public abstract void setTableSize(String tableSize); @Persist public abstract String getPagingSpan(); public abstract void setPagingSpan(String pagingSpan); Home.HTML <div jwcid='[EMAIL PROTECTED]:Gallery' collectionType='ognl:@[EMAIL PROTECTED]' component='galleryWidget' collectionContent='collectionContent' autoPagingContent='autoPagingContent' tableSize='1' pagingSpan='5' > I also tried specifying the parameter as a property within the JWC file and that failed as well. Any ideas? Best regards Ken in nashua From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Thu, 11 Oct 2007 09:35:54 -0400 Nick, Prior attempts to specify tableSize='tableSize'> inside Home.html caused NumberFormatException because the rendering cycle was acting on the text above in my arithmetic condition. <span jwcid='@If' condition='ognl:(index % tableSize) == 0'> I am giving it a try now... From: [EMAIL PROTECTED] To: users@tapestry.apache.org Subject: RE: parameter binding broken in T-4.1.* - PROPERTYSELECTION Date: Wed, 10 Oct 2007 14:32:08 -0400 I decided to model T-4 examples and it still produces exception private static final String[] tableSizeOptions = new String[] { '1', '2', '3', '4', '5', '10', '25', '50', '100', '500', '1000', '2500', '5000', '10000', '25000', '50000' }; private static final String[] pagingSpanOptions = new String[] { '5', '10', '15', '20', '25' }; public IPropertySelectionModel getTableSizeModel() { if (tableSizeModel == null) tableSizeModel = new StringPropertySelectionModel(tableSizeOptions); return tableSizeModel; } public IPropertySelectionModel getPagingSpanModel() { if (pagingSpanModel == null) pagingSpanModel = new StringPropertySelectionModel(pagingSpanOptions); return pagingSpanModel; } <component id='tableSizeSelect' type='PropertySelection'> <binding name='value' value='tableSize'/> <binding name='model' value='tableSizeModel'/> </component> <component id='pagingSpanSelect' type='PropertySelection'> <binding name='value' value='pagingSpan'/> <binding name='model' value='pagingSpanModel'/> </component> @Persist public abstract String getTableSize(); @Persist public abstract String getPagingSpan(); <select jwcid='tableSizeSelect' onchange='tapestry.form.refresh(this.form)'/> <select jwcid='pagingSpanSelect' onchange='tapestry.form.refresh(this.form)'/> I cannot do arithmetic on this property due to divide by zero. So how do you set the DEFAULT VALUE of a property ? I see no support for doing this. I cannot use parameters because it states the parameter cannot be updated. Please advise... thank You An exception has occurred.You may continue by restarting the session. [ +/- ] Exception: Unable to parse OGNL expression '(index % tableSize) == 0': / by zero org.apache.tapestry.BindingException Unable to parse OGNL expression '(index % tableSize) == 0': / by zero binding: ExpressionBinding[Home/galleryWidget (index % tableSize) == 0] location: classpath:/org/trails/demo/components/Gallery.html, line 31 26 27 <span jwcid='[EMAIL PROTECTED]'> 28 <table width='100%'> 29 <tr> 30 <span jwcid='[EMAIL PROTECTED]' source='ognl:collection' value='ognl:currentObject' index='ognl:index'> 31 <span jwcid='@If' condition='ognl:(index % tableSize) == 0'> 32 <span jwcid='@Insert' value='</tr><tr>' raw='true'/> 33 </span> 34 <td> 35 <a jwcid='[EMAIL PROTECTED]' listener='listener:edit' parameters='ognl:currentObject'> 36 <img jwcid='@Image' [ +/- ] Exception: Unable to parse OGNL expression '(index % tableSize) == 0': / by zero Climb to the top of the charts! Play Star Shuffle: the word scramble challenge with star power. Play Now! Climb to the top of the charts! Play Star Shuffle: the word scramble challenge with star power. Play Now! Climb to the top of the charts! Play Star Shuffle: the word scramble challenge with star power. Play Now! Help yourself to FREE treats served up daily at the Messenger Café. Stop by today! Climb to the top of the charts! Play Star Shuffle: the word scramble challenge with star power. Play Now! Help yourself to FREE treats served up daily at the Messenger Café. Stop by today! Peek-a-boo FREE Tricks & Treats for You! Get 'em! Boo! Scare away worms, viruses and so much more! Try Windows Live OneCare! Try now! Boo! Scare away worms, viruses and so much more! Try Windows Live OneCare! Try now! Boo! Scare away worms, viruses and so much more! Try Windows Live OneCare! Try now! Climb to the top of the charts! Play Star Shuffle: the word scramble challenge with star power. Play Now! Peek-a-boo FREE Tricks & Treats for You! Get 'em! Peek-a-boo FREE Tricks & Treats for You! Get 'em! _________________________________________________________________ Climb to the top of the charts! Play Star Shuffle: the word scramble challenge with star power. http://club.live.com/star_shuffle.aspx?icid=starshuffle_wlmailtextlink_oct