Registration open for Community Over Code North America
Hello! Registration is still open for the upcoming Community Over Code NA event in Halifax, NS! We invite you to register for the event https://communityovercode.org/registration/ Apache Committers, note that you have a special discounted rate for the conference at US$250. To take advantage of this rate, use the special code sent to the committers@ list by Brian Proffitt earlier this month. If you are in need of an invitation letter, please consult the information at https://communityovercode.org/visa-letter/ Please see https://communityovercode.org/ for more information about the event, including how to make reservations for discounted hotel rooms in Halifax. Discounted rates will only be available until Sept. 5, so reserve soon! --Rich, for the event planning team - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Final reminder: ApacheCon North America call for presentations closing soon
[Note: You're receiving this because you are subscribed to one or more Apache Software Foundation project mailing lists.] This is your final reminder that the Call for Presetations for ApacheCon North America 2022 will close at 00:01 GMT on Monday, May 23rd, 2022. Please don't wait! Get your talk proposals in now! Details here: https://apachecon.com/acna2022/cfp.html --Rich, for the ApacheCon Planners - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Call for Presentations now open, ApacheCon North America 2022
[You are receiving this because you are subscribed to one or more user or dev mailing list of an Apache Software Foundation project.] ApacheCon draws participants at all levels to explore “Tomorrow’s Technology Today” across 300+ Apache projects and their diverse communities. ApacheCon showcases the latest developments in ubiquitous Apache projects and emerging innovations through hands-on sessions, keynotes, real-world case studies, trainings, hackathons, community events, and more. The Apache Software Foundation will be holding ApacheCon North America 2022 at the New Orleans Sheration, October 3rd through 6th, 2022. The Call for Presentations is now open, and will close at 00:01 UTC on May 23rd, 2022. We are accepting presentation proposals for any topic that is related to the Apache mission of producing free software for the public good. This includes, but is not limited to: Community Big Data Search IoT Cloud Fintech Pulsar Tomcat You can submit your session proposals starting today at https://cfp.apachecon.com/ Rich Bowen, on behalf of the ApacheCon Planners apachecon.com @apachecon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon starts tomorrow!
ApacheCon @Home starts tomorrow! Details at https://www.apachecon.com/acah2021/index.html (Note: You're receiving this because you are subscribed to one or more user lists for Apache Software Foundation projects.) We've got three days of great content lined up for you, spanning 14 project communities. And we're very excited about the keynotes, with presentations from David Nalley, Ashley Wolfe, Mark Cox, Alison Parker, and Michael Weinberg. And we'll be hearing from our Platinum sponsors in their keynotes as well! (Schedule is at https://www.apachecon.com/acah2021/tracks/) You can still register today, at https://www.apachecon.com/acah2021/register.html We especially want to thank our sponsors, who have made this event possible: Strategic sponsor: Google Platinum sponsors: Huawei, Tencent, Instaclustr, and Apple Gold sponsors: AWS, Aiven, Gradle, Replicated, Red Hat, Baidu, Fiter, Cerner, Dremio, and Didi Silver sponsors: Bamboo, SpereEx, Microsoft, Imply, Securonix, DataStax, and Crafter Software Bronze sponsor: Technical Arts Please join us on our Slack for discussion before, during, and after the event! http://s.apache.org/apachecon-slack And follow us on Twitter - https://twitter.com/apachecon - for tips and announcements during the event. See you tomorrow! -- Rich Bowen, VP Conferences The Apache Software Foundation https://apachecon.com/ @apachecon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon is just 3 weeks away!
[You are receiving this email because you are subscribed to the user list of one or more Apache project.] Dear Apache enthusiast, ApacheCon is our annual convention, featuring content related to our many software projects. This year, it will be held on September 21-23. Registration is free this year, and since it’s online, you can attend from the comfort of your home or office. Details about the event, including the schedule and registration, are available on the event website at https://apachecon.com/acah2021/ We hope you’ll consider attending this year, where you’ll see content in 14 tracks, including: API & Microservice; Big Data: Ozone; Big Data: SQL/NoSQL; Big Data: Streaming; Cassandra; Community; Content Delivery; Content Management; Federated Data; Fineract & Fintech; Geospatial; Groovy; Highlights; Incubator; Integration; Internet of Things; Observability; Search; Tomcat. We will also feature keynotes from Ashley Wolf, Mark Cox, Alison Parker and Michael Weinberg. Details on the schedule, and these keynotes, can be found at https://www.apachecon.com/acah2021/tracks/ We look forward to seeing you at this year’s ApacheCon! – Rich Bowen, for the Apachecon Planners - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Call for Presentations for ApacheCon 2021 now open
[Note: You are receiving this because you are subscribed to a users@ list on one or more Apache Software Foundation projects.] The ApacheCon Planners and the Apache Software Foundation are pleased to announce that ApacheCon@Home will be held online, September 21-23, 2021. Once again, we’ll be featuring content from dozens of our projects, as well as content about our community, how Apache works, business models around Apache software, the legal aspects of open source, and many other topics. Last year’s virtual ApacheCon@Home event was a big success, with 5,745 registrants from more than 150 countries, spanning every time zone, with the virtual format delivering content to attendees who would never have attended an in-person ApacheCon (83% of post-event poll responders in 2020 indicated this was their first ApacheCon ever)! Given the great participation and excitement for last year’s event, we are announcing the Call for Presentations is now open to presenters from around the world until May 1st. Talks can be focused on the topics above, as well as any of our amazing projects. Submit your talks today! https://www.apachecon.com/acah2021/cfp.html We look forward to reviewing your contribution to one of the most popular open source software events in the world! Rich, for the ApacheCon Planners -- Rich Bowen, VP Conferences The Apache Software Foundation https://apachecon.com/ @apachecon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Announcing ApacheCon @Home 2020
Hi, Apache enthusiast! (You’re receiving this because you’re subscribed to one or more dev or user mailing lists for an Apache Software Foundation project.) The ApacheCon Planners and the Apache Software Foundation are pleased to announce that ApacheCon @Home will be held online, September 29th through October 1st, 2020. We’ll be featuring content from dozens of our projects, as well as content about community, how Apache works, business models around Apache software, the legal aspects of open source, and many other topics. Full details about the event, and registration, is available at https://apachecon.com/acah2020 Due to the confusion around how and where this event was going to be held, and in order to open up to presenters from around the world who may previously have been unable or unwilling to travel, we’ve reopened the Call For Presentations until July 13th. Submit your talks today at https://acna2020.jamhosted.net/ We hope to see you at the event! Rich Bowen, VP Conferences, The Apache Software Foundation - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Call for presentations for ApacheCon North America 2020 now open
Dear Apache enthusiast, (You’re receiving this message because you are subscribed to one or more project mailing lists at the Apache Software Foundation.) The call for presentations for ApacheCon North America 2020 is now open at https://apachecon.com/acna2020/cfp ApacheCon will be held at the Sheraton, New Orleans, September 28th through October 2nd, 2020. As in past years, ApacheCon will feature tracks focusing on the various technologies within the Apache ecosystem, and so the call for presentations will ask you to select one of those tracks, or “General” if the content falls outside of one of our already-organized tracks. These tracks are: Karaf Internet of Things Fineract Community Content Delivery Solr/Lucene (Search) Gobblin/Big Data Integration Ignite Observability Cloudstack Geospatial Graph Camel/Integration Flagon Tomcat Cassandra Groovy Web/httpd General/Other The CFP will close Friday, May 1, 2020 8:00 AM (America/New_York time). Submit early, submit often, at https://apachecon.com/acna2020/cfp Rich, for the ApacheCon Planners - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon North America 2019 Schedule Now Live!
Dear Apache Enthusiast, (You’re receiving this message because you’re subscribed to one or more Apache Software Foundation project user mailing lists.) We’re thrilled to announce the schedule for our upcoming conference, ApacheCon North America 2019, in Las Vegas, Nevada. See it now at https://www.apachecon.com/acna19/schedule.html The event will be held September 9th through 12th at the Flamingo Hotel. Register today at https://www.apachecon.com/acna19/register.html Our schedule features keynotes by James Gosling, the father of Java; Samaira Mehta, founder and CEO of the Billion Kids Can Code project; and David Brin, noted science fiction author and futurist. And we’ll have a discussion panel featuring some of the founders of The Apache Software Foundation, talking about the past as well as their vision for the future. ApacheCon is the flagship convention of the ASF, and features tracks curated by many of our project communities: Apache Drill, Apache Karaf, Big Data, TomcatCon, Apache Cloudstack, Integration, Apache Cassandra, Streaming, Geospatial software, Graph processing, Internet of Things, Community, Machine Learning, Apache Traffic Control, Apache Beam, Observability, OFBiz, and Mobile app development. The Hackathon, which will run all day, every day, is the place to meet your project community, and get some serious work knocked out in a short focused time. The BarCamp is the place to discuss the topics that are important to you, with your colleagues, in an unconference format. We offer financial assistance for travel and lodging for those who want to come to ApacheCon but are unable to afford it. Apply at http://apache.org/travel/ by June 21st to be considered for this. If you’re unable to make it to North America, we’ll also be running ApacheCon Europe in Berlin in October. Details of that event are at https://aceu19.apachecon.com/ Follow us on Twitter - @ApacheCon - for all the latest updates. See you in Las Vegas! Rich Bowen, VP Conferences, The ASF rbo...@apache.org http://apachecon.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
4 Apache Events in 2019: DC Roadshow soon; next up Chicago, Las Vegas, and Berlin!
Dear Apache Enthusiast, (You’re receiving this because you are subscribed to one or more user mailing lists for an Apache Software Foundation project.) TL;DR: * Apache Roadshow DC is in 3 weeks. Register now at https://apachecon.com/usroadshowdc19/ * Registration for Apache Roadshow Chicago is open. http://apachecon.com/chiroadshow19 * The CFP for ApacheCon North America is now open. https://apachecon.com/acna19 * Save the date: ApacheCon Europe will be held in Berlin, October 22nd through 24th. https://apachecon.com/aceu19 Registration is open for two Apache Roadshows; these are smaller events with a more focused program and regional community engagement: Our Roadshow event in Washington DC takes place in under three weeks, on March 25th. We’ll be hosting a day-long event at the Fairfax campus of George Mason University. The roadshow is a full day of technical talks (two tracks) and an open source job fair featuring AWS, Bloomberg, dito, GridGain, Linode, and Security University. More details about the program, the job fair, and to register, visit https://apachecon.com/usroadshowdc19/ Apache Roadshow Chicago will be held May 13-14th at a number of venues in Chicago’s Logan Square neighborhood. This event will feature sessions in AdTech, FinTech and Insurance, startups, “Made in Chicago”, Project Shark Tank (innovations from the Apache Incubator), community diversity, and more. It’s a great way to learn about various Apache projects “at work” while playing at a brewery, a beercade, and a neighborhood bar. Sign up today at https://www.apachecon.com/chiroadshow19/ We’re delighted to announce that the Call for Presentations (CFP) is now open for ApacheCon North America in Las Vegas, September 9-13th! As the official conference series of the ASF, ApacheCon North America will feature over a dozen Apache project summits, including Cassandra, Cloudstack, Tomcat, Traffic Control, and more. We’re looking for talks in a wide variety of categories -- anything related to ASF projects and the Apache development process. The CFP closes at midnight on May 26th. In addition, the ASF will be celebrating its 20th Anniversary during the event. For more details and to submit a proposal for the CFP, visit https://apachecon.com/acna19/ . Registration will be opening soon. Be sure to mark your calendars for ApacheCon Europe, which will be held in Berlin, October 22-24th at the KulturBrauerei, a landmark of Berlin's industrial history. In addition to innovative content from our projects, we are collaborating with the Open Source Design community (https://opensourcedesign.net/) to offer a track on design this year. The CFP and registration will open soon at https://apachecon.com/aceu19/ . Sponsorship opportunities are available for all events, with details listed on each event’s site at http://apachecon.com/. We look forward to seeing you! Rich, for the ApacheCon Planners @apachecon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Speakers needed for Apache DC Roadshow
We need your help to make the Apache Washington DC Roadshow on Dec 4th a success. What do we need most? Speakers! We're bringing a unique DC flavor to this event by mixing Open Source Software with talks about Apache projects as well as OSS CyberSecurity, OSS in Government and and OSS Career advice. Please take a look at: http://www.apachecon.com/usroadshow18/ (Note: You are receiving this message because you are subscribed to one or more mailing lists at The Apache Software Foundation.) Rich, for the ApacheCon Planners -- rbo...@apache.org http://apachecon.com @ApacheCon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Register now for ApacheCon and save $250
Greetings, Apache software enthusiasts! (You’re getting this because you’re on one or more dev@ or users@ lists for some Apache Software Foundation project.) ApacheCon North America, in Montreal, is now just 80 days away, and early bird prices end in just two weeks - on July 21. Prices will be going up from $550 to $800 so register NOW to save $250, at http://apachecon.com/acna18 And don’t forget to reserve your hotel room. We have negotiated a special rate and the room block closes August 24. http://www.apachecon.com/acna18/venue.html Our schedule includes over 100 talks and we’ll be featuring talks from dozens of ASF projects., We have inspiring keynotes from some of the brilliant members of our community and the wider tech space, including: * Myrle Krantz, PMC chair for Apache Fineract, and leader in the open source financing space * Cliff Schmidt, founder of Literacy Bridge (now Amplio) and creator of the Talking Book project * Bridget Kromhout, principal cloud developer advocate at Microsoft * Euan McLeod, Comcast engineer, and pioneer in streaming video We’ll also be featuring tracks for Geospatial science, Tomcat, Cloudstack, and Big Data, as well as numerous other fields where Apache software is leading the way. See the full schedule at http://apachecon.com/acna18/schedule.html As usual we’ll be running our Apache BarCamp, the traditional ApacheCon Hackathon, and the Wednesday evening Lighting Talks, too, so you’ll want to be there. Register today at http://apachecon.com/acna18 and we’ll see you in Montreal! -- Rich Bowen VP, Conferences, The Apache Software Foundation h...@apachecon.com @ApacheCon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon North America 2018 schedule is now live.
Dear Apache Enthusiast, We are pleased to announce our schedule for ApacheCon North America 2018. ApacheCon will be held September 23-27 at the Montreal Marriott Chateau Champlain in Montreal, Canada. Registration is open! The early bird rate of $575 lasts until July 21, at which time it goes up to $800. And the room block at the Marriott ($225 CAD per night, including wifi) closes on August 24th. We will be featuring more than 100 sessions on Apache projects. The schedule is now online at https://apachecon.com/acna18/ The schedule includes full tracks of content from Cloudstack[1], Tomcat[2], and our GeoSpatial community[3]. We will have 4 keynote speakers, two of whom are Apache members, and two from the wider community. On Tuesday, Apache member and former board member Cliff Schmidt will be speaking about how Amplio uses technology to educate and improve the quality of life of people living in very difficult parts of the world[4]. And Apache Fineract VP Myrle Krantz will speak about how Open Source banking is helping the global fight against poverty[5]. Then, on Wednesday, we’ll hear from Bridget Kromhout, Principal Cloud Developer Advocate from Microsoft, about the really hard problem in software - the people[6]. And Euan McLeod, VP VIPER at Comcast will show us the many ways that Apache software delivers your favorite shows to your living room[7]. ApacheCon will also feature old favorites like the Lightning Talks, the Hackathon (running the duration of the event), PGP key signing, and lots of hallway-track time to get to know your project community better. Follow us on Twitter, @ApacheCon, and join the disc...@apachecon.com mailing list (send email to discuss-subscr...@apachecon.com) to stay up to date with developments. And if your company wants to sponsor this event, get in touch at h...@apachecon.com for opportunities that are still available. See you in Montreal! Rich Bowen VP Conferences, The Apache Software Foundation h...@apachecon.com @ApacheCon [1] http://cloudstackcollab.org/ [2] http://tomcat.apache.org/conference.html [3] http://apachecon.dukecon.org/acna/2018/#/schedule?search=geospatial [4] http://apachecon.dukecon.org/acna/2018/#/scheduledEvent/df977fd305a31b903 [5] http://apachecon.dukecon.org/acna/2018/#/scheduledEvent/22c6c30412a3828d6 [6] http://apachecon.dukecon.org/acna/2018/#/scheduledEvent/fbbb2384fa91ebc6b [7] http://apachecon.dukecon.org/acna/2018/#/scheduledEvent/88d50c3613852c2de - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Save the date: ApacheCon North America, September 24-27 in Montréal
Dear Apache Enthusiast, (You’re receiving this message because you’re subscribed to a user@ or dev@ list of one or more Apache Software Foundation projects.) We’re pleased to announce the upcoming ApacheCon [1] in Montréal, September 24-27. This event is all about you — the Apache project community. We’ll have four tracks of technical content this time, as well as lots of opportunities to connect with your project community, hack on the code, and learn about other related (and unrelated!) projects across the foundation. The Call For Papers (CFP) [2] and registration are now open. Register early to take advantage of the early bird prices and secure your place at the event hotel. Important dates March 30: CFP closes April 20: CFP notifications sent August 24: Hotel room block closes (please do not wait until the last minute) Follow @ApacheCon on Twitter to be the first to hear announcements about keynotes, the schedule, evening events, and everything you can expect to see at the event. See you in Montréal! Sincerely, Rich Bowen, V.P. Events, on behalf of the entire ApacheCon team [1] http://www.apachecon.com/acna18 [2] https://cfp.apachecon.com/conference.html?apachecon-north-america-2018 - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Last chance: ApacheCon is just three weeks away
ApacheCon is just three weeks away, in Miami, Florida, May 15th - 18th. http://apachecon.com/ There's still time to register and attend. ApacheCon is the best place to find out about tomorrow's software, today. ApacheCon is the official convention of The Apache Software Foundation, and includes the co-located events: * Apache: Big Data * Apache: IoT * TomcatCon * FlexJS Summit * Cloudstack Collaboration Conference * BarCampApache * ApacheCon Lightning Talks And there's dozens of opportunities to meet your fellow Apache enthusiasts, both from your project, and from the other 200+ projects at the Apache Software Foundation. Register here: http://events.linuxfoundation.org/events/apachecon-north-america/attend/register- More information here: http://apachecon.com/ Follow us and learn more about ApacheCon: * Twitter: @ApacheCon * Discussion mailing list: https://lists.apache.org/list.html?apachecon-disc...@apache.org * Podcasts and speaker interviews: http://feathercast.apache.org/ * IRC: #apachecon on the https://freenode.net/ We look forward to seeing you in Miami! -- Rich Bowen - VP Conferences, The Apache Software Foundation http://apachecon.com/ @apachecon signature.asc Description: OpenPGP digital signature
FINAL REMINDER: CFP for ApacheCon closes February 11th
Dear Apache Enthusiast, This is your FINAL reminder that the Call for Papers (CFP) for ApacheCon Miami is closing this weekend - February 11th. This is your final opportunity to submit a talk for consideration at this event. This year, we are running several mini conferences in conjunction with the main event, so if you're submitting for one of those events, please pay attention to the instructions below. Apache: Big Data * Event information: http://events.linuxfoundation.org/events/apache-big-data-north-america * CFP: http://events.linuxfoundation.org/events/apache-big-data-north-america/program/cfp Apache: IoT (Internet of Things) * Event Information: http://us.apacheiot.org/ * CFP - http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp (Indicate 'IoT' in the Target Audience field) CloudStack Collaboration Conference * Event information: http://us.cloudstackcollab.org/ * CFP - http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp (Indicate 'CloudStack' in the Target Audience field) FlexJS Summit * Event information - http://us.apacheflexjs.org/ * CFP - http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp (Indicate 'Flex' in the Target Audience field) TomcatCon * Event information - https://tomcat.apache.org/conference.html * CFP - http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp (Indicate 'Tomcat' in the Target Audience field) All other topics and projects * Event information - http://events.linuxfoundation.org/events/apachecon-north-america/program/about * CFP - http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp Admission to any of these events also grants you access to all of the others. Thanks, and we look forward to seeing you in Miami! -- Rich Bowen VP Conferences, Apache Software Foundation rbo...@apache.org Twitter: @apachecon (You are receiving this email because you are subscribed to a dev@ or users@ list of some Apache Software Foundation project. If you do not wish to receive email from these lists any more, you must follow that list's unsubscription procedure. View the headers of this message for unsubscription instructions.) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon CFP closing soon (11 February)
Hello, fellow Apache enthusiast. Thanks for your participation, and interest in, the projects of the Apache Software Foundation. I wanted to remind you that the Call For Papers (CFP) for ApacheCon North America, and Apache: Big Data North America, closes in less than a month. If you've been putting it off because there was lots of time left, it's time to dig for that inspiration and get those talk proposals in. It's also time to discuss with your developer and user community whether there's a track of talks that you might want to propose, so that you have more complete coverage of your project than a talk or two. We're looking for talks directly, and indirectly, related to projects at the Apache Software Foundation. These can be anything from in-depth technical discussions of the projects you work with, to talks about community, documentation, legal issues, marketing, and so on. We're also very interested in talks about projects and services built on top of Apache projects, and case studies of how you use Apache projects to solve real-world problems. We are particularly interested in presentations from Apache projects either in the Incubator, or recently graduated. ApacheCon is where people come to find out what technology they'll be using this time next year. Important URLs are: To submit a talk for Apache: Big Data - http://events.linuxfoundation.org/events/apache-big-data-north-america/program/cfp To submit a talk for ApacheCon - http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp To register for Apache: Big Data - http://events.linuxfoundation.org/events/apache-big-data-north-america/attend/register- To register for ApacheCon - http://events.linuxfoundation.org/events/apachecon-north-america/attend/register- Early Bird registration rates end March 12th, but if you're a committer on an Apache project, you get the low committer rate, which is less than half of the early bird rate! For further updated about ApacheCon, follow us on Twitter, @ApacheCon, or drop by our IRC channel, #apachecon on the Freenode IRC network. Or contact me - rbo...@apache.org - with any questions or concerns. Thanks! Rich Bowen, VP Conferences, Apache Software Foundation -- (You've received this email because you're on a dev@ or users@ mailing list of an Apache Software Foundation project. For subscription and unsubscription information, consult the headers of this email message, as this varies from one list to another.) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Save the date: ApacheCon Miami, May 15-19, 2017
Dear Apache enthusiast, ApacheCon and Apache Big Data will be held at the Intercontinental in Miami, Florida, May 16-18, 2017. Submit your talks, and register, at http://apachecon.com/ Talks aimed at the Big Data section of the event should go to http://events.linuxfoundation.org/events/apache-big-data-north-america/program/cfp while other talks should go to http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp ApacheCon is the best place to meet the people that develop the software that you use and rely on. It’s also a great opportunity to deepen your involvement in the project, and perhaps make the leap to contributing. And we find that user case studies, showcasing how you use Apache projects to solve real world problems, are very popular at this event. So, do consider whether you have a use case that might make a good presentation. ApacheCon will have many different ways that you can participate: Technical Content: We’ll have three days of technical sessions covering many of the projects at the ASF. We’ll be publishing a schedule of talks on March 9th, so that you can plan what you’ll be attending BarCamp: The Apache BarCamp is a standard feature of ApacheCon - an un-conference style event, where the schedule is determined on-site by the attendees, and anything is fair game. Lightning Talks: Even if you don’t give a full-length talk, the Lightning Talks are five minute presentations on any topic related to the ASF, and can be given by any attendee. If there’s something you’re passionate about, consider giving a Lightning Talk. Sponsor: It costs money to put on a conference, and this is a great opportunity for companies involved in Apache projects, or who benefit from Apache code - your employers - to get their name and products in front of the community. Sponsors can start any any monetary level, and can sponsor everything from the conference badge lanyard, through larger items such as video recordings and evening events. For more information on sponsoring ApacheCon, see http://apachecon.com/sponsor/ So, get your tickets today at http://apachecon.com/ and submit your talks. ApacheCon Miami is going to be our best ApacheCon yet, and you, and your project, can’t afford to miss it. -- Rich Bowen - rbo...@apache.org VP, Conferences http://apachecon.com @apachecon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon is now less than a month away!
Dear Apache Enthusiast, ApacheCon Sevilla is now less than a month out, and we need your help getting the word out. Please tell your colleagues, your friends, and members of related technical communities, about this event. Rates go up November 3rd, so register today! ApacheCon, and Apache Big Data, are the official gatherings of the Apache Software Foundation, and one of the best places in the world to meet other members of your project community, gain deeper knowledge about your favorite Apache projects, learn about the ASF. Your project doesn't live in a vacuum - it's part of a larger family of projects that have a shared set of values, as well as a shared governance model. And many of our project have an overlap in developers, in communities, and in subject matter, making ApacheCon a great place for cross-pollination of ideas and of communities. Some highlights of these events will be: * Many of our board members and project chairs will be present * The lightning talks are a great place to hear, and give, short presentations about what you and other members of the community are working on * The key signing gets you linked into the web of trust, and better able to verify our software releases * Evening receptions and parties where you can meet community members in a less formal setting * The State of the Feather, where you can learn what the ASF has done in the last year, and what's coming next year * BarCampApache, an informal unconference-style event, is another venue for discussing your projects at the ASF We have a great schedule lined up, covering the wide range of ASF projects, including: * CI and CD at Scale: Scaling Jenkins with Docker and Apache Mesos - Carlos Sanchez * Inner sourcing 101 - Jim Jagielski * Java Memory Leaks in Modular Environments - Mark Thomas ApacheCon/Apache Big Data will be held in Sevilla, Spain, at the Melia Sevilla, November 14th through 18th. You can find out more at http://apachecon.com/ Other ways to stay up to date with ApacheCon are: * Follow us on Twitter at @apachecon * Join us on IRC, at #apachecon on the Freenode IRC network * Join the apachecon-discuss mailing list by sending email to apachecon-discuss-subscr...@apache.org * Or contact me directly at rbo...@apache.org with questions, comments, or to volunteer to help See you in Sevilla! -- Rich Bowen: VP, Conferences rbo...@apache.org http://apachecon.com/ @apachecon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon Seville CFP closes September 9th
It's traditional. We wait for the last minute to get our talk proposals in for conferences. Well, the last minute has arrived. The CFP for ApacheCon Seville closes on September 9th, which is less than 2 weeks away. It's time to get your talks in, so that we can make this the best ApacheCon yet. It's also time to discuss with your developer and user community whether there's a track of talks that you might want to propose, so that you have more complete coverage of your project than a talk or two. For Apache Big Data, the relevant URLs are: Event details: http://events.linuxfoundation.org/events/apache-big-data-europe CFP: http://events.linuxfoundation.org/events/apache-big-data-europe/program/cfp For ApacheCon Europe, the relevant URLs are: Event details: http://events.linuxfoundation.org/events/apachecon-europe CFP: http://events.linuxfoundation.org/events/apachecon-europe/program/cfp This year, we'll be reviewing papers "blind" - that is, looking at the abstracts without knowing who the speaker is. This has been shown to eliminate the "me and my buddies" nature of many tech conferences, producing more diversity, and more new speakers. So make sure your abstracts clearly explain what you'll be talking about. For further updated about ApacheCon, follow us on Twitter, @ApacheCon, or drop by our IRC channel, #apachecon on the Freenode IRC network. -- Rich Bowen WWW: http://apachecon.com/ Twitter: @ApacheCon - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
ApacheCon Europe call for papers open
As you are no doubt already aware, we will be holding ApacheCon in Seville, Spain, the week of November 14th, 2016. The call for papers (CFP) for this event is now open, and will remain open until September 9th. The event is divided into two parts, each with its own CFP. The first part of the event, called Apache Big Data, focuses on Big Data projects and related technologies. Website: http://events.linuxfoundation.org/events/apache-big-data-europe CFP: http://events.linuxfoundation.org/events/apache-big-data-europe/program/cfp The second part, called ApacheCon Europe, focuses on the Apache Software Foundation as a whole, covering all projects, community issues, governance, and so on. Website: http://events.linuxfoundation.org/events/apachecon-europe CFP: http://events.linuxfoundation.org/events/apachecon-europe/program/cfp ApacheCon is the official conference of the Apache Software Foundation, and is the best place to meet members of your project and other ASF projects, and strengthen your project's community. If your organization is interested in sponsoring ApacheCon, contact me at e...@apache.org ApacheCon is a great place to find the brightest developers in the world, and experts on a huge range of technologies. I hope to see you in Seville! - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
[ANNOUNCE] CFP open for ApacheCon North America 2016
Community growth starts by talking with those interested in your project. ApacheCon North America is coming, are you? We are delighted to announce that the Call For Presentations (CFP) is now open for ApacheCon North America. You can submit your proposed sessions at http://events.linuxfoundation.org/events/apache-big-data-north-america/program/cfp for big data talks and http://events.linuxfoundation.org/events/apachecon-north-america/program/cfp for all other topics. ApacheCon North America will be held in Vancouver, Canada, May 9-13th 2016. ApacheCon has been running every year since 2000, and is the place to build your project communities. While we will consider individual talks we prefer to see related sessions that are likely to draw users and community members. When submitting your talk work with your project community and with related communities to come up with a full program that will walk attendees through the basics and on into mastery of your project in example use cases. Content that introduces what's new in your latest release is also of particular interest, especially when it builds upon existing well know application models. The goal should be to showcase your project in ways that will attract participants and encourage engagement in your community, Please remember to involve your whole project community (user and dev lists) when building content. This is your chance to create a project specific event within the broader ApacheCon conference. Content at ApacheCon North America will be cross-promoted as mini-conferences, such as ApacheCon Big Data, and ApacheCon Mobile, so be sure to indicate which larger category your proposed sessions fit into. Finally, please plan to attend ApacheCon, even if you're not proposing a talk. The biggest value of the event is community building, and we count on you to make it a place where your project community is likely to congregate, not just for the technical content in sessions, but for hackathons, project summits, and good old fashioned face-to-face networking. -- rbo...@apache.org http://apache.org/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Some Tapestry infection questions
On 08/02/2011 12:16 PM, ERNESTO ARROYO RON wrote: I am on holidays, and trying to use some Tapestry awesome features, as the inyection. But I do not understand some issues, and cannot find the answer in the wiki or somewhere, to the info is not enough clear for me, sorry. This is very simple. In the Java part of a page I want to inject the DAO, so I use this code: @Inject private IAplicacionesDAO appDAO; To have this code running I need to add the service implementation via AppModule and bind: public static void bind(ServiceBinder binder) { binder.bind(IAplicacionesDAO.class,AplicacionesDAO.class); Two questions: a) if I add a constructor to the first class, I have an error: Class com.earroyoron.pages.VerAplicaciones was not transformed for use as a component; this can happen if it is an interface, or was not in a package subject to component transformation and in the documentation I read the constructor was needed! But without it works and with it I have an error…. A constructor should not be used in a Page or Component class. Tapestry does a lot of work behind the scenes when deployed to transform these classes you write so they function nicely. Read up on the page lifecycle: http://tapestry.apache.org/page-life-cycle.html I assume there is some initialization you would like to do on your page when it is rendered and displayed (which you may have thought belonged in a constructor), for this you would implement one of the render lifecycle methods. http://tapestry.apache.org/component-rendering.html For example @BeginRender public void loadUser(){ userId = 1; appDAO.loadUser(userId); } b) Cannot Tapestry find the service without the bind? The infection in the DAO to use Hibernate does not need to say nothing to Tapestry, it works without any extra configuration in module. You will need to do the binding so it can auto-bind your service for you. You could alternately write a build method to build the service yourself, but that would be more work and I'm assuming is not what you wanted. http://tapestry.apache.org/defining-tapestry-ioc-services.html Thank you in advance, when I learn I promise to help the newbies! :O) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Conversion from 5.1 to 5.2
On 06/28/2011 01:13 PM, Kalle Korhonen wrote: For Rich, the definite resolution is to increase the max amount of memory allocated to permgen (for Sun's JVM). Yea, after the 1 day crash we updated the JVM settings to: -Xms512m -Xmx512m -XX:MaxPermSize=512m Will follow up if problems still persist. -Rich Kalle - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Conversion from 5.1 to 5.2
Just wanted to comment that I'm having very similar issues with an application that I upgraded the production version from 5.1 to 5.2. The 5.1 app ran fine indefinitely with no issues. After the upgrade it took about 1.5 days for the app to crash due to running out of PermGen space (at that point PermGen was not being tuned at all via JVM properties). After restarting it was stable for a few days, then another restart and it crashed in 1 day. This behavior was never observed on a demo machine running the same app with a very long uptime (months). The only differences between the apps are the database connected to and the number of users on the system over time. No real resolution to provide yet nor am I even sure whether this is inherently Tapestry or some private code issue, but I'll be watching this thread and comment if I find anything out related. -Rich On 06/28/2011 12:16 PM, Norman Franke wrote: On Jun 24, 2011, at 7:28 PM, Kalle Korhonen wrote: On Fri, Jun 24, 2011 at 3:33 PM, Norman Franke wrote: After I had everything working pretty well, I put it onto the production server where it ran for a few hours and then died with a PermGen exception. Previously, my app would run for months with the 64 MB of PermGen allocated to servers by default. Now, after upgrading to 5.2.5 it wouldn't run for more than a few hours at 128 MB. I ended up setting it to 512 MB, but that just seems outrageous. Is this normal to require 8x PermGen? I haven't made any other change to my app, just those required to upgrade. Good post, thanks for insights. As for the permgen usage, perhaps it's not normal, but expected and even documented. At 250 pages, your web application is likely bigger than a typical Tapestry app and permgen consumption correlates with the size of the web app. However, in return for higher permgen usage you'll have lower heap consumption, so you'll get better scalability. What's the max you are allocating to the JVM (the -Xmx) and have you tried finding a lower setting that would still work? Permgen usage is for the whole JVM and no more will be required even if you see increase in traffic, unlike in T5.1 case with page pool. Since you have an internal app with fairly predictable traffic pattern and scalability requirements it may not matter for you, but for the common case it's a win with only minor disadvantages (memory is cheap). I'm allocating 768MB for the heap. I haven't tried lower, but jconsole indicates I'm using no more than 80 MB. So I'm a but puzzled at how it exceeded 128 MB. Perhaps when it threw an exception while I was getting some of the conversion issues resolved? Does throwing an exception leak PermGen? -Norman - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Tapestry Remembers which page to navigate after User Logs in ?
It might help to know the structure by which you control login and navigation inside the authorized portion of your application. In my case, all the login forms explicitly return the Overview page : public onSuccessFromForm(){ // Login validation return overview; } @InjectPage private Overview overview; Is there some structure to your application that prevents this from being a usable pattern? On 06/14/2011 04:07 PM, sunilmanu wrote: Hello Everyone, After the user is kicked out of a session and they try to login back, Tapestry tries to take the user back to the last requested Page or tries to execute the last requested Action ? Why does it behave like that ? Is there a way I can configure it to go to a "PAGE-123" always after the user logs in successfully ALL the time ? Right now because of this issue, lot of users are complaining and they are getting Stale Link Exception because after logging in it tries to take them to a page and lot of information might be missing and it breaks. So pl help or point me to right direction... !! Is there any particular Cookie I need to delete when the redirect happens ? thanks in advance for all the help... thanks, Sunil -- View this message in context: http://tapestry.1045711.n5.nabble.com/Tapestry-Remembers-which-page-to-navigate-after-User-Logs-in-tp4489125p4489125.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Safari , DOM 12 Exception, core.js
On 06/14/2011 02:33 PM, Howard Lewis Ship wrote: Is is just one specific field that fails? Perhaps there's something odd about the field's name (the way naming a Form field "submit" can cause grief ... something Tapestry won't even try to do now). This code has changed in 5.3 recently, to defer the lookup until an error actually needs to be displayed. Hmm, interesting point. The first times it was failing on a field named 'name'. That went away when I overrode the property block of the name field in the BeanEditForm (which had been implicit due to t:include directive) to explicitly declare the label and textfield, even though they were still set to 'name'. That behavior was what set off a '!' in my head about the whole thing, followed by the error jumping to a different field. The new field it moved to was 'id', which already had a property block override written. When I renamed the t:id for the textfield for the id field to 'tid', this error went away. So in this case, it did seem to be a result of a name causing grief. What worries me is that these are field names used conventionally across my entity objects. I'd not expect an entity field's name to trigger browser side effects. The workaround seems to be writing property overrides for every form related to an entity object with these names, or refactoring all the entity objects. I suppose I can do one of the two for the time being, but I am curious as to some kind of resolution. It's hard from a developer's standpoint to infer that an entity field's name is going to circumstantially break an internal Component's behavior. Regards, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Safari , DOM 12 Exception, core.js
Hi, an issue has recently been brought to my attention by QA, and I'm trying to unravel what is at play here. The core of the problem is that I have a form with validation on a page, and when this page is loaded in Safari (5.0.2), the error console appears at the top saying that the TapestryInitializer.validate method failed due to DOM Exception 12 syntax error on the validation hash built by Tapestry. After thorough debugging, I isolated the issue to a section of code from core.js, the code on line 7723 is failing with the DOM Exception 12 error. More specifically, it is the down method that fails when it calls findElements and the line 3301 fails in that, when calling the root.querySelectorAll(e) method. The value of e here is the same as selector variable except there is '#[object HTMLInputElement] ' appended to the front An example of the selector passed into the down method when it fails. selector = "label[for='name']" e = "#[object HTMLInputElement] label[for='name']" Has anyone encountered something similar before and found a way to deal with it? I've gotten pretty far in uncovering the issue, but I'm running out of ideas as to a remedy. The validation fails on the page as a result, which QA is deeming unacceptable. Strangely enough, I never reproduced this bug in FireFox, Chrome, or IE at any point. Below is the Associated Javascript. Thanks, Rich Tapestry.FieldEventManager = Class.create( { 7715 7716initialize : function(field) { 7717this.field = $(field); 7718 7719var id = this.field.id; 7720 7721var selector = "label[for='" + id + "']"; 7722 7723this.label = this.field.up("form").down(selector); 7724this.icon = $(id + '_icon'); 7725 7726this.translator = Prototype.K; 7727 7728var fem = $(this.field.form).getFormEventManager(); 7729 7730if (fem.validateOnBlur) { 7731 7732document.observe(Tapestry.FOCUS_CHANGE_EVENT, function(event) { 7733/* 7734* If changing focus *within the same form* then perform 7735* validation. Note that Tapestry.currentFocusField does not 7736* change until after the FOCUS_CHANGE_EVENT notification. 7737*/ 7738if (Tapestry.currentFocusField == this.field 7739&& this.field.form == event.memo.form) 7740this.validateInput(); 7741 7742}.bindAsEventListener(this)); 7743} 7744 7745if (fem.validateOnSubmit) { 7746$(this.field.form).observe(Tapestry.FORM_VALIDATE_FIELDS_EVENT, 7747this.validateInput.bindAsEventListener(this)); 7748} 7749} findElements: function(root) { 3290root = root || document; 3291var e = this.expression, results; 3292 3293switch (this.mode) { 3294case 'selectorsAPI': 3295if (root !== document) { 3296var oldId = root.id, id = $(root).identify(); 3297id = id.replace(/([\.:])/g, "\\$1"); 3298e = "#" + id + " " + e; 3299} 3300 3301results = $A(root.querySelectorAll(e)).map(Element.extend); 3302root.id = oldId; 3303 3304return results; 3305case 'xpath': 3306return document._getElementsByXPath(this.xpath, root); 3307default: 3308return this.matcher(root); 3309} 3310} - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Clearing @SessionState
On 06/06/2011 01:58 PM, Thiago H. de Paula Figueiredo wrote: On Mon, 06 Jun 2011 14:34:20 -0300, robnangle wrote: Eh I dont understand what you mean here. Am i not setting the user when somebody logs in with a valid username and password? I'm sorry, I overlooked the only place user is set. Having been using Tapestry since 5.0.5, almost four years ago, I'd say @SessionState works as it should. Your code uses too much side-effects for my taste. And I can't see the declarations of the username and password variables. I'd have to say there is too much going on as well as omitted for an outside observer to really help much more than the suggestions that have been made by several of us to follow Tapestry standard practices The best recommendation I could make it to make a much more simplified version, in separate pages perhaps, where all that happens is a login page -> authenticate user and establish session state -> display links depending on user type -> provide log out Strip out any other logic like the fixtures, etc. Here's how I might approach it (TML pages left out) Login page class: public class Login { @InjectPage private userIndex index; @Inject private UserDAO udao; @Component private Form login; @Component private TextField uname; @Component private PasswordField pw; @Property private String username; @Property private String password; public onSuccessFromLogin(){ if(udao.validateUser( username, password )){ return index.initialize( username ); }else{ login.recordError(uname, "User failed to validate!"); return null; } } } UserIndex page class: public class UserIndex { @SessionState(create=false) private User user; public Object initialize(String username){ user = udao.read(username); return this; } @Persist @Property private Boolean adminUser; @SetupRender public void verifyPermissions(){ if(adminUser == null && user != null && "Admin".equalsIgnoreCase( user.getUserType() )){ adminUser = true; } adminUser = false; } @Component private EventLink logout; @Inject private Request req; @InjectPage private Login login; public Object onLogout(){ user = null; Session session = req.getSession(false); if(session != null) session.invalidate(); return login; } } UserDAO interface class: public interface UserDAO { public User read(String username); public boolean validate(String username, String password); } UserDAOImpl service class: public class UserDAOImpl implements UserDAO { public User read(String username){ User user = null; Handler handler = new Handler(); Connection conn = handler.getConnection(); PreparedStatement prep; String read = "Select * from users WHERE username = ?"; prep = conn.prepareStatement( read ); prep.setString(1, username); ResultSet rs = (ResultSet) prep.executeQuery(); while(rs.next()) { user = new User(); // TODO: set fields } return user; } public boolean validate(String username, String password){ User user = null; Handler handler = new Handler(); Connection conn = handler.getConnection(); PreparedStatement prep; String read = "Select * from users WHERE username = ? and password = ?"; prep = conn.prepareStatement( read ); prep.setString(1, username); prep.setString(2, password); ResultSet rs = (ResultSet) prep.executeQuery(); if(rs.next()) { return true; } return false; } } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Clearing @SessionState
On 06/06/2011 12:48 PM, robnangle wrote: Rich M wrote: Most likely your page is not loading and assigning the adminUser boolean like you are expecting, and after your initial login, it's not calling any of that code anymore and thus your privileges appear to regress to a normal user, when really you aren't calculating them at all. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Also it not only appears to regress, it does regress. The logged in user display name reverts to the previous logged in user.. Fair enough, I was trying to hypothesize at what might be your problem based on the small subset of related code shown. But you're right, that result does not seem to fit with what I said. It would be more clear to see what is happening to the User object if we could see that code that stores and authorizes the User object before it gets to this page where it can be cleared. Any luck with some debugging messages to verify what methods are getting called in between the working and broken states? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Clearing @SessionState
On 06/06/2011 12:20 PM, robnangle wrote: Rich M wrote: On 06/06/2011 12:04 PM, robnangle wrote: No didn't seem to make a difference im afraid. I cant think of anything that would revert the user back to the previous logged in user? My updated code now looks like: @SessionState(create=false) @Property private User user; @Property private boolean userExists; @Property private Transfers transfers; private boolean adminUser; Don't know the rest of your code, but if this boolean adminUser determines whether or not show pages, it should be persisted shouldn't it? Otherwise the value set here is going to clear. When is UpdatePoints() called? Well does it have to be persisted? I call the adminUser() in every class where it is necessary. The updatePoints() is the constructor so it will be called when the page is loading? You might want to refresh your knowledge of the page render lifecycle and how pages/components operate in T5, based on your comment here. http://tapestry.apache.org/page-life-cycle.html Someone else might be better able to explain, but to my knowledge, a page is only constructed a minimal amount of times and re-used within the application. The page is not constructed to render a response for a request. You'd be looking to call the logic for a page "loading" or rather being requested in the onActivate method, or a render phase like @SetupRender. As for persisted or not, if you are maintaining a user session in your application, might I ask what the point is of recalculating their admin status if that never changes within a given session? http://tapestry.apache.org/persistent-page-data.html Most likely your page is not loading and assigning the adminUser boolean like you are expecting, and after your initial login, it's not calling any of that code anymore and thus your privileges appear to regress to a normal user, when really you aren't calculating them at all. You might have an easier time figuring this out using some System.out commands or better yet using the built-in logging support @Inject private Logger log; and provide a Log4J configuration file in src/main/resources - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Clearing @SessionState
On 06/06/2011 12:04 PM, robnangle wrote: No didn't seem to make a difference im afraid. I cant think of anything that would revert the user back to the previous logged in user? My updated code now looks like: @SessionState(create=false) @Property private User user; @Property private boolean userExists; @Property private Transfers transfers; private boolean adminUser; Don't know the rest of your code, but if this boolean adminUser determines whether or not show pages, it should be persisted shouldn't it? Otherwise the value set here is going to clear. When is UpdatePoints() called? @Inject private Request request; public UpdatePoints() { transfers = new Transfers(); transfers.getTransferWeek(); transfers.getCloseWeek(); adminUser(); } public boolean adminUser() { if(user.getUserType() != null&& user.getUserType().equalsIgnoreCase("Admin")) { adminUser = true; setAdminUser(true); } else { adminUser = false; } return adminUser; } public boolean getAdminUser() { return adminUser; } public void setAdminUser(boolean adminUser) { this.adminUser = adminUser; } public Object onSubmitFromLogout() throws Exception { user = null; Session session = request.getSession(false); if (session != null) { session.invalidate(); } return index; } -- View this message in context: http://tapestry.1045711.n5.nabble.com/Clearing-SessionState-tp4458525p4459081.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Actionlink + action
You should use an eventlink instead. In that case you can provide an explicit event name that all the links can map to, while not having overlapping component Ids. http://tapestry.apache.org/current/tapestry-core/ref/org/apache/tapestry5/corelib/components/EventLink.html On 05/25/2011 05:58 PM, degressor wrote: Hi, I would like to have many actionlinks with different contextes, like: pdf csv xml xml I get the error: Exception assembling root component of page Report: Exception assembling embedded component 'linkAnfrage_list' (of type org.apache.tapestry5.corelib.components.ActionLink, within Report): Component Report already contains a child component with id 'linkAnfrage_list'. Embedded component ids must be unique (excluding case, which is ignored). The links should lead to the same action, but with differen parameters. The problem is, I generate this links per some generator and put them to tapestry. So it is not easy to use t:loop here. Is there any way to get many links to the same action, with different parametes in tapestry? -- View this message in context: http://tapestry.1045711.n5.nabble.com/Actionlink-action-tp4426703p4426703.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: how can I clear the page context?
You can use the public String onPassivate() function in a Page class to alter the context URL posted to the client browser. For example, I like to use it to beautify the URL so its not the more code-y page name it normally would be, and also to mask page names from the user so they cannot violate permissions (I do keep track of their current page somehow so a refresh doesn't break things for them). String onPassivate(){ //strip the package prefix and the page class suffix return selectedComponent.replaceFirst("admin/", "").replaceFirst("Tab", ""); } Hope that helps, Rich On 05/20/2011 05:50 PM, Ray Nicholus wrote: ...so that the context is not included after the page initially loads when I, say, refresh the page via the browser's refresh button? In other words, how can I load a page with context parameters once and then discard them so subsequent refreshes oft hat page do not use these parameters? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: how to make tapestry ignore processing some paths
Contributions and such should be in the Module class, typically AppModule. I believe that was omitted from that code excerpt because the rest of the page was in the context of the Module class. On 05/18/2011 05:02 PM, hese wrote: Hi, I dont want tapestry to process some urls, and want it to be handled by another servlet. Here - http://tapestry.apache.org/tapestry5/guide/conf.html, it is mentioned to do it in a method like this... public static void contributeIgnoredPathsFilter(Configuration configuration) { configuration.add("/dwr/.*"); } but where do I write this method? Should I extend some class and override this method? Thanks! -- View this message in context: http://tapestry.1045711.n5.nabble.com/how-to-make-tapestry-ignore-processing-some-paths-tp4407839p4407839.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
X-UA-Compatible & IE 9
Hi, has anyone else had trouble with getting the X-UA-Compatible meta tag working in IE9 with Tapestry? I have verified that my rendered HTML page has the tag in the element, but going into Developer Tools it says the Document Mode for the page is not the one I set it to. The reason I mention it on the list is the following from http://msdn.microsoft.com/library/cc288325%28VS.85%29.aspx#SetMode : The |X-UA-Compatible| header is not case sensitive; however, it must appear in the header of the webpage (the HEAD section <http://msdn.microsoft.com/en-us/library/ms535252%28v=VS.85%29.aspx>) before all other elements except for the title <http://msdn.microsoft.com/en-us/library/ms535910%28v=VS.85%29.aspx> element and other *meta* elements. In the rendered HTML, it seems Tapestry places all of the script and stylesheet link tags ahead of the meta and title tags I have defined in my Layout.tml file. Following the above excerpt, this seems to break the rule mentioned about X-UA-Compatible needing to be before all other elements except for the title and other meta elements. I'm trying to force IE8 Document Mode so the Scriptaculous Drag-Drop library will work (does not seem to in IE9). http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";> http://www.w3.org/1999/xhtml";> http://localhost:8080/mparking/assets/1.0/stack/en/core.js</a>>"type="text/javascript"> http://localhost:8080/mparking/assets/1.0/core/scriptaculous_1_8_2/dragdrop.js</a>>"type="text/javascript"> http://localhost:8080/mparking/assets/1.0/ctx/scripts/droppableContent.js</a>>"type="text/javascript"> http://localhost:8080/mparking/assets/1.0/chenillekit/components/datetimefield/datepicker.js</a>>"type="text/javascript"> http://localhost:8080/mparking/assets/1.0/chenillekit/components/datetimefield/datepicker_lang.js</a>>"type="text/javascript"> http://localhost:8080/mparking/assets/1.0/chenillekit/prototype-base-extensions.js</a>>"type="text/javascript"> http://localhost:8080/mparking/assets/1.0/chenillekit/prototype-date-extensions.js</a>>"type="text/javascript"> http://localhost:8080/mparking/assets/1.0/core/default.css>"> http://localhost:8080/mparking/assets/1.0/core/tapestry-console.css>"> http://localhost:8080/mparking/assets/1.0/ctx/layout/main.css>"> http://localhost:8080/mparking/assets/1.0/chenillekit/components/datetimefield/datepicker.css>"> Application Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Updating only specific divs in Zone update
Thanks, I suppose I should have responded after Thiago mentioned the MultiZoneUpdate a few days back, which did solve the problem for me. In my case, I have each Component using the triggerEvent method of Component Resources with a Callback to return the proper MultiZoneUpdate. I guess it was hard for me to conceptually understand why I'd need a MultiZoneUpdate to update just a single Zone in the way I wanted, but it works. Component public Object returnZone(){ final Object[] returnObject = new Object[]{null}; Object[] context = new Object[]{zone}; cr.triggerEvent("TriggerZoneUpdate", context, new ComponentEventCallback() { public boolean handleResult(final Object result) { if (result != null) { returnObject[0] = result; } return result != null; } }); return returnObject[0]; } Containing Page public Object onTriggerZoneUpdate(Zone zoneForUpdate){ return new MultiZoneUpdate(zoneForUpdate.getClientId(), zoneForUpdate); } On 05/17/2011 12:23 PM, Mark wrote: You probably want to build a multizone update to update just the necessary zones. Here is a snippet of some of my code that updates zones only if they are visible in that particular context: public MultiZoneUpdate getPriceMultiZoneUpdate() { MultiZoneUpdate update = new MultiZoneUpdate("totalPriceZone", totalPriceZone); if(isSubtotalVisible()) { update = update.add("subtotalZone", subtotalZone); } if(isDiscountVisible()) { update = update.add("totalDiscountsZone", totalDiscountsZone); } if(isSalesTaxVisible()) { update = update.add("totalSalesTaxZone", totalSalesTaxZone); } if(isFulfillmentFeeVisible()) { update = update.add("totalFulfillmentFeeZone", totalFulfillmentFeeZone); } return update; } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Hyperlink not becoming hyperlink
If I understand you correctly, you have some information stored in a field of your entity that is HTML mark-up for a hyperlink. For example, a beanedit for the entity class Reference which has a field String website which for this entry has an html link like "href="somesite.com">Some Site". If you want that to display as markup and not text, you would use the t:value="entity.website" /> which will output it as HTML for you. You may need to override the column to insert this into the TML, the documentation for beanedit should make it clear how to do that if you don't know how. On 05/17/2011 10:16 AM, TG wrote: Hi, This is a newbie question so please bear with me :) I used beanedit to display HTML. So far I like it, but a column that contains hyperlink, the values does not "become" a hyperlink that I can click to launch an external site. How do I make the values becoming a clickable hyperlink in Tapestry 5? Is there any easy way? One line code is the best. Thanks. -- View this message in context: http://tapestry.1045711.n5.nabble.com/Hyperlink-not-becoming-hyperlink-tp4403607p4403607.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: TAP5-920 rears it's head again in 5.2 with a twist
I've run into this issue now myself, was there ever a resolution to this or a workaround? As David said, supply an explicit value encoder isn't able to solve the issue for me either. Thanks, Rich On 03/24/2011 10:52 PM, David Rees wrote: TAP5-920 has long been an issue for one of our applications which uses composite keys. https://issues.apache.org/jira/browse/TAP5-920 In the past we have worked around the issue by providing an encoder with our affected loops. We are now working on upgrading from 5.1.0.5 to 5.2.4 and have run into a new problem: Even if we supply an encoder, the default encoder (HibernateEntityValueEncoder) gets used and the NPE is back. Below is a stack trace. Suggestions? Caused by: java.lang.NullPointerException at org.apache.tapestry5.internal.hibernate.HibernateEntityValueEncoder.(HibernateEntityValueEncoder.java:53) at org.apache.tapestry5.hibernate.HibernateModule$1.create(HibernateModule.java:104) at org.apache.tapestry5.internal.services.ValueEncoderSourceImpl.getValueEncoder(ValueEncoderSourceImpl.java:48) at $ValueEncoderSource_12eead93780.getValueEncoder($ValueEncoderSource_12eead93780.java) at org.apache.tapestry5.internal.services.ComponentDefaultProviderImpl.defaultValueEncoder(ComponentDefaultProviderImpl.java:124) at $ComponentDefaultProvider_12eead93782.defaultValueEncoder($ComponentDefaultProvider_12eead93782.java) at org.apache.tapestry5.corelib.components.Loop.defaultEncoder(Loop.java:304) at org.apache.tapestry5.corelib.components.Loop$MethodAccess_defaultEncoder_12eead93e34.invoke(Loop$MethodAccess_defaultEncoder_12eead93e34.java) at org.apache.tapestry5.internal.transform.ParameterWorker$InvokeParameterDefaultMethod.advise(ParameterWorker.java:95) -Dave - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Updating only specific divs in Zone update
Hi, I'm trying to put together an interactive page with multiple components, where each component can go through event/actions. For example, two components might be account details and reports. In account details the initial view is a display of your basic fields and their values, but if you select an Edit button, the component will change to display a bean edit form. The challenge I am facing is, when the Edit button is selected, to only update the display of the account details component and not alter the display of the rest of the page. At the moment, I have all of the components contained on the page in a single Zone. From each component I use event callbacks to call a method on the containing Page that will return the zone for the component to update in events/actions. This does not accomplish what I want, as each update call to the zone.getBody() will re-render all of the components at once, not just the account details. Alternately, I tried writing a self-contained zone within each component, but when I return that on event/action methods from a component, it then replaces the rendering of the page with an updated rendering of just that component. I have read about the 't-zone-update' css-class that can be used on a DIV within a Zone to isolate the content that actually gets updated, but I can't see how that will get me to where I want. Any guidance would be much appreciated. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Using JavascriptSupport addInitializerCall
Hi, I'm trying to leverage some of scriptaculous in a new application I'm working on. I've got the @Import worked out for including the modules of scriptaculous I want, but I'm having a hard time grasping how to create and use some Javascript libraries I create in my pages. The first simple step I wanted to take was to make a standard always a Droppable using my Layout page. I made a JS file that has a basic function to add this div to the Droppables, but I'm not sure how to get it to run when the page initializes, Firebug debugging is verifying it does not get called, but I cannot figure it out beyond that. I tried the following: @Import(stylesheet="context:layout/main.css",library={"${tapestry.scriptaculous}/dragdrop.js","${tapestry.scriptaculous}/effects.js","context:scripts/droppableContent.js"}) public class Layout { @Inject private JavaScriptSupport jsl; public void setupRender(){ jsl.addInitializerCall("createDroppable()",""); //Make the Right Content area always droppable } } droppableContent.js: function createDroppable() { Droppables.add('rightContent'); alert('added RightContent to droppables'); } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Tapestry 5.2.5 Select component's multiple property
I believe you would do It's just like any custom component you might make that has a package beyond *.components, you write out the extra packages in front of the component class name to qualify it. I checked my code and I guess I also do it a different way: model="pageListModel" encoder="pageListModel"/> @Property @Persist private GenericMultipleSelectModel pageListModel; @Component private MultipleSelect mselect; @Property @Persist private List pageList; On 04/15/2011 12:52 PM, TG wrote: Ok that helps. Installed 1.3.2 but how do I use it in the .tml file? What is the namespace I need to import? I asked as I still have the same not found error i.e. Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException: Unable to resolve 'MultipleSelect' to a component class name. [at classpath:tapp/.../...(truncated for simplicity).../pages/UserSave.tml, line 18] at org.apache.tapestry5.internal.pageload.PageLoaderImpl.startComponent(PageLoaderImpl.java:743) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.component(PageLoaderImpl.java:627) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.processTemplateToken(PageLoaderImpl.java:426) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.consumeToEndElementAndPopBodyElement(PageLoaderImpl.java:611) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.parameter(PageLoaderImpl.java:559) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.processTemplateToken(PageLoaderImpl.java:443) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.component(PageLoaderImpl.java:648) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.processTemplateToken(PageLoaderImpl.java:426) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.element(PageLoaderImpl.java:687) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.processTemplateToken(PageLoaderImpl.java:421) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.component(PageLoaderImpl.java:648) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.processTemplateToken(PageLoaderImpl.java:426) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.programAssembler(PageLoaderImpl.java:264) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.access$900(PageLoaderImpl.java:65) at org.apache.tapestry5.internal.pageload.PageLoaderImpl$4.invoke(PageLoaderImpl.java:236) at org.apache.tapestry5.internal.pageload.PageLoaderImpl$4.invoke(PageLoaderImpl.java:220) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65) ... 84 more Caused by: org.apache.tapestry5.ioc.util.UnknownValueException: Unable to resolve 'MultipleSelect' to a component class name. -- View this message in context: http://tapestry.1045711.n5.nabble.com/Tapestry-5-2-5-Select-component-s-multiple-property-tp4304338p4306041.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Tapestry 5.2.5 Select component's multiple property
You want ChenilleKit 1.3.2, 1.1.0 is for older version of Tapestry. On 04/15/2011 12:26 PM, TG wrote: I do not use maven2. But I downloaded chenillekit-tapestry-1.1.0.jar manually, installed, run again and I got a new error during bootup - Caused by: java.lang.ClassNotFoundException: org.apache.tapestry5.internal.services.RequestPathOptimizer Seems like RequestPathOptimizer is not part of Tapestry 5.2.5 anymore? What version of Tapestry do you use? -- View this message in context: http://tapestry.1045711.n5.nabble.com/Tapestry-5-2-5-Select-component-s-multiple-property-tp4304338p4305974.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Absolute Paths in Tapestry 5.2.5
We faced problems with the root and app contexts using HTTPD/Apache in front of a Servlet Container as well at my company. Our solution was as follows, all in HTTPD. I thought I'd post this in case you find it useful. You will probably be interested in the lines from ssl.conf (if you don't use HTTPS then put in the httpd.conf). If you run more than just the myApp on the server, you'd need a RewriteCond(s) to exempt your other apps/pages from the rewrite: httpd.conf (forces HTTPS and maps to the servlet port on requests to the app context): RewriteEngine On RewriteCond %{HTTPS} "off" RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} ProxyRequests Off Order deny,allow Allow from all ProxyPass /myApp http://localhost:8080/myApp ProxyPassReverse /myApp http://localhost:8080/myApp ssl.conf (maps requests not to the app, such as root, to the app context): RewriteEngine On RewriteRule !^/myApp https://%{HTTP_HOST}/myApp%{REQUEST_URI} On 04/13/2011 12:04 PM, Jochen Heintz wrote: Hi, i am tried this in AppModule : public static void contributeAlias(Configuration configuration) { BaseURLSource source = new BaseURLSource() { public String getBaseURL(boolean secure) { return "http://";; } }; configuration.add(AliasContribution.create(BaseURLSource.class, source)); } but the method getBaseURL gets never called. Did i missed something. Thanks Jochen -- View this message in context: http://tapestry.1045711.n5.nabble.com/Absolute-Paths-in-Tapestry-5-2-5-tp4300824p4300975.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Object creator set to null..
For trivia it's worth noting that the String equals and equalsIgnoreCase methods also return false on null inputs, so you can also write: if("Admin".equalsIgnoreCase( user.getUserType() )) { ... } On 04/08/2011 08:51 AM, robnangle wrote: Richard Hill-7 wrote: Well you can't call a method on null! null is not a String with value "null". It's a special value in java - basically a reference to a value called null (i.e distinct from an undefined variable that has no reference assigned). You need to check for a null value before calling any methods: if(user.getUserType() != null&& user.getUserType().equalsIgnoreCase("Admin")) { On Fri, 2011-04-08 at 05:38 -0700, robnangle wrote: Richard Hill-7 wrote: You don't say what line your getting your npe but I'm guessing it's this: if(user.getUserType().equalsIgnoreCase("Admin") if .getUserType() is null as you imply it can be then calling .equalsIgnorecase() is going to result in an npe. Ye thats the line im getting it on. Yes everybodys userType will be null after the first user who was set to Admin. How do I get around this or is it possible? I thought you could just: public boolean adminUser() { if(user.getUserType().equalsIgnoreCase("Admin")) { adminUser = true; setAdminUser(true); } else if(user.getUserType().equalsIgnoreCase(null)) { adminUser = false; } return adminUser; } However it never goes by the first if when the user is not an admin user.. -- View this message in context: http://tapestry.1045711.n5.nabble.com/Object-creator-set-to-null-tp4290653p4290718.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Of course.. Cheers -- View this message in context: http://tapestry.1045711.n5.nabble.com/Object-creator-set-to-null-tp4290653p4290738.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Implementation mixin and persistence
Amazing, thanks for the example here. My implementation isn't exactly the same, but your code example made the concept quite clear and I've got it working now. Thanks! On 04/06/2011 01:14 PM, Taha Hafeez wrote: Dear Rich I tried to implement what you desired ( to the best of my understanding) this is it import org.apache.tapestry5.ClientElement; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.Link; import org.apache.tapestry5.annotations.Environmental; import org.apache.tapestry5.annotations.Import; import org.apache.tapestry5.annotations.InjectContainer; import org.apache.tapestry5.annotations.Parameter; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.json.JSONObject; import org.apache.tapestry5.services.javascript.JavaScriptSupport; @Import(library = "show-hide.js") public class ShowHide { @Parameter(required = true) private boolean state; @InjectContainer private ClientElement element; @Inject private ComponentResources resources; @Environmental private JavaScriptSupport javaScriptSupport; void afterRender(){ Link link = resources.createEventLink("showHide"); JSONObject spec = new JSONObject(); spec.put("url", link.toAbsoluteURI()); spec.put("id", element.getClientId()); spec.put("status", state); javaScriptSupport.addScript("new ShowHide(%s);", spec); } void onShowHide(boolean state){ System.out.println("Old state = " + this.state + " new state = " + state); this.state = state; } } The javascript... (it is not doing anything fancy, just basic implementation) ShowHide = Class.create( { initialize : function(spec) { $(spec.id).status = spec.status; Event.observe(spec.id, "click", function() { if (!this.status) { this.status = true; } else { this.status = !this.status; } Tapestry.ajaxRequest(spec.url + "/" + this.status, function() { if($(spec.id).status){ $(spec.id).show(); }else { $(spec.id).hide(); } }); }); } }); This is the component using this mixin as implementation mixin import net.jkbank.dc.ticket.mixins.ShowHide; import org.apache.tapestry5.BindingConstants; import org.apache.tapestry5.ClientElement; import org.apache.tapestry5.MarkupWriter; import org.apache.tapestry5.annotations.Environmental; import org.apache.tapestry5.annotations.Mixin; import org.apache.tapestry5.annotations.Parameter; import org.apache.tapestry5.services.javascript.JavaScriptSupport; public class Div implements ClientElement { @Parameter(value = "prop:componentResources.id", defaultPrefix = BindingConstants.LITERAL) private String clientId; @SuppressWarnings("unused") @Mixin private ShowHide showHide; private String assignedClientId; @Environmental private JavaScriptSupport javaScriptSupport; void setupRender(){ assignedClientId = javaScriptSupport.allocateClientId(clientId); } void beginRender(MarkupWriter writer){ writer.element("div", "id", getClientId()); } void afterRender(MarkupWriter writer){ writer.end(); } public String getClientId() { return assignedClientId; } } This is the usage in a template file This is some text public class TestPage { @Persist @Property private boolean state; } regards Taha On Wed, Apr 6, 2011 at 10:35 PM, LLTYK wrote: Last time I did this I used a javascript cookie api. -- View this message in context: http://tapestry-users.832.n2.nabble.com/Implementation-mixin-and-persistence-tp6243796p6246820.html Sent from the Tapestry Users mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Implementation mixin and persistence
Thanks Josh, you are right. Using the Prototype Ajax.request object solved the problem (as it does include that header) and is easier to use anyway. Thanks for the tip. On 04/06/2011 12:51 PM, Josh Canfield wrote: When this is executed, it triggers the event method properly in the Java Page class, but it also triggers the render cycle in the page class as well, as far as my logs indicate. Sounds like tapestry isn't detecting that you are doing XHR. It's detected based on an HTTP header "X-Requested-With" set to "XMLHttpRequest". I believe this is supplied by jquery and prototype, not the base object provided by the browser. Josh On Wed, Apr 6, 2011 at 9:11 AM, Rich M wrote: To add, I'm not sure creating a pure XHR request is working out quite how I might have expected. The following javascript snippet: var request = false; try { request = new XMLHttpRequest(); var url = "/ViewTransactionsTab:HideShow/" + escape(hide); request.open("GET", url, true); request.send(null); } catch (failed) { request = false; } and the Java Page class snippet: @Property @Persist private Boolean hide; void onHideShow(boolean hidden){ debug("In onHideShow. Hidden: " + hidden); hide = hidden; } When this is executed, it triggers the event method properly in the Java Page class, but it also triggers the render cycle in the page class as well, as far as my logs indicate. I don't believe this rendering is relayed to the client, but it doesn't seem right either. This code was loosely based off of http://tapestry.markmail.org/thread/fc2hubsb6dd6hait On 04/06/2011 11:49 AM, Rich M wrote: Thanks, that was an interesting read, but it doesn't help solve my problem. I still don't see how I would pass a persisted property-bound parameter to the implementation mixin. The only related code I've seen is like @Component(parameters={"hidden=hide"}) but using that like this doesn't work for obvious reasons, since its a Mixin not a Component @Component(parameters={"hidden=hide"}) @Mixin("HideShowSearch") private HideShowSearch hss; On 04/05/2011 08:51 PM, Taha Hafeez wrote: Hi There was a discussion related to 'Parameters in Implementation Mixins'... http://tapestry.1045711.n5.nabble.com/Parameters-in-implementation-mixins-td3395407.html Hope it helps <http://tapestry.1045711.n5.nabble.com/Parameters-in-implementation-mixins-td3395407.html> regards Taha On Wed, Apr 6, 2011 at 2:22 AM, Rich Mwrote: Hi, I have a Page and it has a search form, contained within an ID'ed DIV. I made an implementation mixin that initializes an Event observer on the on click event of a 'button' in the Page's HTML. The event triggers javascript that hides/shows the search form. That works fine, but I want to add functionality so there is persistence of the hide/show state between page refreshes. Documentation recommends to delegate persistence to the container using parameters, but I haven't seen any documentation that indicates it is possible to use parameters on an implementation mixin. At any rate, what would be the concept to achieving this, having the javascript hide/show event return an XHR request to the server that it in turn uses to set the persistent field? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Implementation mixin and persistence
To add, I'm not sure creating a pure XHR request is working out quite how I might have expected. The following javascript snippet: var request = false; try { request = new XMLHttpRequest(); var url = "/ViewTransactionsTab:HideShow/" + escape(hide); request.open("GET", url, true); request.send(null); } catch (failed) { request = false; } and the Java Page class snippet: @Property @Persist private Boolean hide; void onHideShow(boolean hidden){ debug("In onHideShow. Hidden: " + hidden); hide = hidden; } When this is executed, it triggers the event method properly in the Java Page class, but it also triggers the render cycle in the page class as well, as far as my logs indicate. I don't believe this rendering is relayed to the client, but it doesn't seem right either. This code was loosely based off of http://tapestry.markmail.org/thread/fc2hubsb6dd6hait On 04/06/2011 11:49 AM, Rich M wrote: Thanks, that was an interesting read, but it doesn't help solve my problem. I still don't see how I would pass a persisted property-bound parameter to the implementation mixin. The only related code I've seen is like @Component(parameters={"hidden=hide"}) but using that like this doesn't work for obvious reasons, since its a Mixin not a Component @Component(parameters={"hidden=hide"}) @Mixin("HideShowSearch") private HideShowSearch hss; On 04/05/2011 08:51 PM, Taha Hafeez wrote: Hi There was a discussion related to 'Parameters in Implementation Mixins'... http://tapestry.1045711.n5.nabble.com/Parameters-in-implementation-mixins-td3395407.html Hope it helps <http://tapestry.1045711.n5.nabble.com/Parameters-in-implementation-mixins-td3395407.html> regards Taha On Wed, Apr 6, 2011 at 2:22 AM, Rich M wrote: Hi, I have a Page and it has a search form, contained within an ID'ed DIV. I made an implementation mixin that initializes an Event observer on the on click event of a 'button' in the Page's HTML. The event triggers javascript that hides/shows the search form. That works fine, but I want to add functionality so there is persistence of the hide/show state between page refreshes. Documentation recommends to delegate persistence to the container using parameters, but I haven't seen any documentation that indicates it is possible to use parameters on an implementation mixin. At any rate, what would be the concept to achieving this, having the javascript hide/show event return an XHR request to the server that it in turn uses to set the persistent field? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Implementation mixin and persistence
Thanks, that was an interesting read, but it doesn't help solve my problem. I still don't see how I would pass a persisted property-bound parameter to the implementation mixin. The only related code I've seen is like @Component(parameters={"hidden=hide"}) but using that like this doesn't work for obvious reasons, since its a Mixin not a Component @Component(parameters={"hidden=hide"}) @Mixin("HideShowSearch") private HideShowSearch hss; On 04/05/2011 08:51 PM, Taha Hafeez wrote: Hi There was a discussion related to 'Parameters in Implementation Mixins'... http://tapestry.1045711.n5.nabble.com/Parameters-in-implementation-mixins-td3395407.html Hope it helps <http://tapestry.1045711.n5.nabble.com/Parameters-in-implementation-mixins-td3395407.html> regards Taha On Wed, Apr 6, 2011 at 2:22 AM, Rich M wrote: Hi, I have a Page and it has a search form, contained within an ID'ed DIV. I made an implementation mixin that initializes an Event observer on the on click event of a 'button' in the Page's HTML. The event triggers javascript that hides/shows the search form. That works fine, but I want to add functionality so there is persistence of the hide/show state between page refreshes. Documentation recommends to delegate persistence to the container using parameters, but I haven't seen any documentation that indicates it is possible to use parameters on an implementation mixin. At any rate, what would be the concept to achieving this, having the javascript hide/show event return an XHR request to the server that it in turn uses to set the persistent field? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Implementation mixin and persistence
Hi, I have a Page and it has a search form, contained within an ID'ed DIV. I made an implementation mixin that initializes an Event observer on the on click event of a 'button' in the Page's HTML. The event triggers javascript that hides/shows the search form. That works fine, but I want to add functionality so there is persistence of the hide/show state between page refreshes. Documentation recommends to delegate persistence to the container using parameters, but I haven't seen any documentation that indicates it is possible to use parameters on an implementation mixin. At any rate, what would be the concept to achieving this, having the javascript hide/show event return an XHR request to the server that it in turn uses to set the persistent field? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Generating popup window after form success
Hi, I'm wondering if there is a good strategy to create a popup window after a successful form submit. The concept here is to popup a Voucher/Coupon window for the user if they complete a successful purchase. I've researched the basics of the concept in terms of HTML forms. You can run some Javascript to open a new window on submission of an HTML form. I'd like to be able to limit this functionality to only occur if the transaction is successful, in other words after the onSuccess method has run. Is there any means to fire javascript at this stage before a page refresh, or should I be looking rather at persisted fields and conditionally executing the javascript on page rending after the onSuccess method invokes a re-render of the page? Looking at the Event constants in the tapestry.js, I didn't immediately see an event beyond prepare/validate for forms that I might observe. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: BeanEditForm: What's happening to my object parameter?
On 03/22/2011 05:10 PM, Thiago H. de Paula Figueiredo wrote: On Tue, 22 Mar 2011 17:53:12 -0300, Rich M wrote: Okay, maybe I'm not interpreting the page lifecycle properly here, or it has changed it some way that is causing me problems? The entity is referenced and loaded properly in onPrepareForRender. Considering that BeanEditor only changes the value of the edited property if it's null, then what could be causing the private entity field to become set to null between onPrepareForRender and the coupling/rendering of the BeanEditor? I have no direct statements doing as much in my code. Why don't you use onPrepare() instead of onPrepareForRender()? Same result, unfortunately. I switched to onPrepareForRender eventually because onPrepare gets called 2-3 times during the page lifecycle while onPrepareForRender only once. It didn't break anything back in 5.1.0.15 so it seemed like a good idea. I wanted to avoid extra DB calls and array/String parsing. On another note, I'm not sure whether this problem even relates to the @Environmental object at all, but I did figure I'd mention it before just in case. Anyway, here is what is happening: @Property @Persist private ThirdParty tp; @Persist @Property private ThirdParty tp2; @Persist private ThirdParty tp3; public void onPrepare(){ ThirdParty tp = tpdao.read( id.getId() ); // perform field parsing for overridden BeanEditForm blocks ThirdParty tp2 = tp.clone(); ThirdParty tp3 = tp.clone(); log.debug("In onPrepare: tp = " + tp); } public void afterRender(){ log.debug("tp: " + tp + "\n tp2: " + tp2 + "\n tp3: " + tp3); } TML: Results: In onPrepare: tp = person; name = person In onPrepare: tp = person; name = person tp: id = person; name = person tp2: id = null; name = null tp3: id = person; name = person In response to the Environment vs. Component Parameters, these are all Pages not Components. Actually this structure and exact use was discussed in this ( http://tapestry.markmail.org/thread/4rffky2r2uqno5ea#query:+page:1+mid:j375h7obo6hd2i6b+state:results ) previous thread. I remember that. :) Yep, you need the Environment here. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: BeanEditForm: What's happening to my object parameter?
On 03/22/2011 02:50 PM, Thiago H. de Paula Figueiredo wrote: Hi! BeanEditor, which is used inside BeanEditForm, only changes the value of the edited property if it's null, so the problem should be elsewhere. By the way, why are you using the Environment instead of component parameters? And what do you call a subpage? Okay, maybe I'm not interpreting the page lifecycle properly here, or it has changed it some way that is causing me problems? The entity is referenced and loaded properly in onPrepareForRender. Considering that BeanEditor only changes the value of the edited property if it's null, then what could be causing the private entity field to become set to null between onPrepareForRender and the coupling/rendering of the BeanEditor? I have no direct statements doing as much in my code. In response to the Environment vs. Component Parameters, these are all Pages not Components. Actually this structure and exact use was discussed in this ( http://tapestry.markmail.org/thread/4rffky2r2uqno5ea#query:+page:1+mid:j375h7obo6hd2i6b+state:results ) previous thread. In trying to mentally recall the justification, I believe the intent is that there is a two-way relationship on the @Environmental PageId id between the container page and the 'subpage'. The subpage term here means that there is the container page with the Grid, and then the subordinate page (loaded via Delegate in container) with the BeanEditForm. By two-way relationship, I mean that the GridPage can manipulate the PageId so that a SubPage can load the correct Entity, and going the other way, the SubPage can reset the PageId in the environment in the event that the user deletes the Entity so the GridPage is aware. Maybe I just need to completely re-evaluate my approach here, perhaps my prior implementation worked by miracle rather than design (I've been forced to learn and seriously develop Tapestry concurrently. Component-driven design over Page-driven design wasn't quite in my repertoire back in August). Before I invest time into that though, I want to verify that there isn't some easy adjustment to my existing code to restore functionality. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
BeanEditForm: What's happening to my object parameter?
Hi, I upgraded my application to 5.2.4 and everything seemed great, but I eventually noticed some weird behavior regarding some functionality that previously worked in my application. I have a page that displays Entities in a Grid. Each row has a link that triggers an event with the context of the given entity ID. At this point, the page stores the id in a persisted Object called PageId, and sets a boolean to conditionally delegate/render a sub-page in the template. In @BeginRender, the PageId is pushed into the environment. The sub-page provides a BeanEditForm for the given Entity object so a user can update information. The sub-page uses @Environmental on a PageId object to grab the one pushed on the stack from the Grid page. In onPrepareForRender, an Entity object is loaded from the DB based on the value in the PageId. Everything is good so far. The Entity object is @Property and @Persist annotated. At the end of the onPrepareForRender method, the Entity is set properly. However, it seems to get de-referenced at some point between that method and AfterRender. I put a debug message in AfterRender and the entity object is no longer referencing the expected values. Strangely enough, if I define @Persist Entity entity2 and write entity2 = entity.clone() in the onPrepareForRender method, in AfterRender, entity2 is still the expected Entity object... After some further prodding, I found out that whichever entity object is set as the object parameter of the BeanEditForm is being re-initialized as if it was assigned = new Entity(). This is breaking my page because I have been using the entity object to 'initialize' the BeanEditForm fields to the stored values of the entity. Since the entity ends up re-initialized during rendering, none of the previously stored fields are available for a user to see and edit. What is happening to the entity object, I thought BeanEditForm was supposed to use it if it was an initialized property (enforced in the container in a "prepare" event)? The first time the Entity link is clicked on the GridPage, the entity object ends up null. The second time as well. The third time, it displays whatever the previous link should have displayed and continues in this fashion indefinitely. I'd assume I must have some flawed logic here somewhere, but it is a bit baffling that it used to work in 5.1. Simplified code example: GridPage.java @Inject private Environment env; @Persist private String subPage; @Persist @Property private PageId id; @Persist @Property private boolean subtabSelect; public Object onActionFromDetailsLink(String cid){ subtabSelect = true; this.subPage = DETAILS_TAB; id = new PageId(cid); debug("DetailsLink clicked. SubPageId set to " + this.subPage); ... } @BeginRender public void pushPageId(){ debug("Loaded ViewTPTab and SubPageId = " + this.id); env.push(PageId.class, id); } @AfterRender public void popPageId(){ this.id = env.pop(PageId.class); } DetailsTab.java: @Environmental private PageId id; @Inject private Environment env; @Property @Persist private ThirdParty tp; @Persist private ThirdParty tp2; @Inject private TPDAO tpdao; public void onPrepareForRender(){ tp = (ThirdParty) tpdao.read(id.getId()); /* pull some info from the tp object, parse and place into Persisted fields. These fields are the only ones displayed properly in the BeanEditForm. BeanEditForm is referencing the tp object. */ tp2 = tp.clone(); debug("In onPrepareForRender of DetailsTab. Loaded ::"+tp+":: from DB"); } public void afterRender(){ debug("In afterRender... the TP object is : " + tp ); //tp is null debug("... tp2 : " + tp2); //tp2 = tpdao.read(id.getId()) } void onPrepareForSubmit(){ env.push(PageId.class, heldId); //push back into environment on submit from BeanEditForm } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: 5.1 : Available pages downgrade
Thanks for the replies so far, they have been helpful. I will be looking into both the application server's maintenance of the /tmp folder - where it does seem Jetty is unpacking the WAR - as well as the memory usage of the application and optimizations for that. The production version is frozen at 5.1.0.15 unfortunately, but I recently begun development on the next release version. That, coinciding with the release of ChenilleKit for 5.2.4, has allowed me to successfully upgrade the next version to 5.2.4, which I'm very excited about. Thanks, Rich On 03/21/2011 02:17 PM, Thiago H. de Paula Figueiredo wrote: Using 5.2.4 will help, as the memory consumption is lowered by not using a page pool anymore. On Mon, 21 Mar 2011 14:51:01 -0300, Kalle Korhonen wrote: I can confirm I've seen similar behavior on Jetty. It's linked to heap space running out and in my case it was directly related to sending huge amounts gzipped form data. See related Jetty issue at http://jira.codehaus.org/browse/JETTY-1167 and my comments there. Apparently Jetty in some cases shuts down the application in order to keep the container running, after which you'd see the behavior you described. Adjust jvm settings and allocate more memory to your process. Allocate enough until the whole process dies (if you are on Linux platform - especially virtualized with no swap space, the OOM killer will shut down the JVM way before your process consumes all of the available RAM). Then investigate if any of your forms are reserving a high amount of memory, possibly play with other JVM settings and *if* you are sending a lot of gzipped data, turn gzipping off and see if it makes a difference. Kalle On Mon, Mar 21, 2011 at 8:21 AM, Rich M wrote: Hi, I've been running a production version of a tapestry application for a couple months now. Just the other day it was reported to me that the application was no longer resolving pages normally, but instead displaying a directory view from the root context. Restarting the application solved the problem, but I'm at a loss as to the cause. Looking through the application logs, the only unusual logging I noticed was that sometime during the timeframe in which the problem was expected to occur, the TapestryModule.ComponentClassResolver fired off 3 lines of logging similar to when you execute the start-up of a Tapestry application. Namely, it displayed lists of available pages, available components, and available mixins. The list of available pages was significantly reduced from the actual pages within the application. It seemed like an at-random mini-subset of the actual pages in the application. There is nothing to indicate someone had tried to start/restart the application again or anything along those lines. Considering the minimal amount of information I have at hand, I was curious to know if this ComponentClassResolver issue might look familiar to anyone? Or perhaps at least an idea of what might cause the ComponentClassResolver to behave as it had so I can follow up with a code review of my application? I run the application in a standalone Jetty 6.1.26 as a WAR deployment. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
5.1 : Available pages downgrade
Hi, I've been running a production version of a tapestry application for a couple months now. Just the other day it was reported to me that the application was no longer resolving pages normally, but instead displaying a directory view from the root context. Restarting the application solved the problem, but I'm at a loss as to the cause. Looking through the application logs, the only unusual logging I noticed was that sometime during the timeframe in which the problem was expected to occur, the TapestryModule.ComponentClassResolver fired off 3 lines of logging similar to when you execute the start-up of a Tapestry application. Namely, it displayed lists of available pages, available components, and available mixins. The list of available pages was significantly reduced from the actual pages within the application. It seemed like an at-random mini-subset of the actual pages in the application. There is nothing to indicate someone had tried to start/restart the application again or anything along those lines. Considering the minimal amount of information I have at hand, I was curious to know if this ComponentClassResolver issue might look familiar to anyone? Or perhaps at least an idea of what might cause the ComponentClassResolver to behave as it had so I can follow up with a code review of my application? I run the application in a standalone Jetty 6.1.26 as a WAR deployment. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Tapestry 5 - cache issue when accessed via proxy
On 03/16/2011 01:48 PM, sunmoor007 wrote: Hi Rich Thanks. I understood the implementation of listener but i was looking at a way to integrate it so that all URL's in app gets modified. I understand that in app module we can plugin any service. Assume i have a impl class implementing the listener interface, how will i integrate it into existing application so that all URL's have a dynamic parameter, say system time in milliseconds appended to the url. Referencing these lines from ClientPersistentFieldStorageImpl.java: 135 public void updateLink(Link link) 136 { 137 refreshClientData(); 138 139 if (clientData != null) link.addParameter(PARAMETER_NAME, clientData); 140 } You can see that the Link object has an addParameter function. You should be able to use this to add the system time to the URL as a parameter, from my understanding. Since you understand the implementation of listener, then that should be pretty simple. It seems the last challenge you are facing is how you should setup your implementation of the listener in the Module so it will be used on link creation. That is a little bit beyond my scope of knowledge here, so I'll defer that answer to someone else. The reason am trying to add the system time is to ensure that everytime a dynamic value is appended to url and hence proxy server wont cache and show me stale data which is currently happening. Thanks Sundar -- View this message in context: http://tapestry.1045711.n5.nabble.com/Tapestry-5-cache-issue-when-accessed-via-proxy-tp3388994p3790608.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Tapestry 5 - cache issue when accessed via proxy
The following is an internal Tapestry implementation of LinkCreationListener and a related class that the implementation makes use of. Maybe this can help you get on your way. http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStrategy.java?view=markup http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImpl.java?view=markup On 03/16/2011 10:26 AM, sunmoor007 wrote: Hi Thiago Thanks again for your response. Will definitely try using LinkCreationListener/LinkCreationHub . Is it something which needs to be integrated in AppModule. I am relatively very new to Tapestry. Would really appreciate if you can provide a sample implementation for LinkCreationListener. Thanks Sundar -- View this message in context: http://tapestry.1045711.n5.nabble.com/Tapestry-5-cache-issue-when-accessed-via-proxy-tp3388994p3782668.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Grid Header Override and Sorting
Apologies for the rambling here. It occurred to me that I could implement the Link class to return in the event handler. So, I made an implementation that will return a URI to the grid.columns:sort event as stated, and everything works nicely. It still feels like a dirty approach though, if anyone agrees and can point me towards a more conceptually sound implementation strategy, I'm all ears. Thanks, Rich On 03/15/2011 12:23 PM, Rich M wrote: On 03/14/2011 02:14 PM, Rich M wrote: Hi, I found this thread http://tapestry.markmail.org/thread/ighytyllingci364 that referenced overriding the grid header ala ... , but it seems there was no response. I'm working on overriding the headers for most of the grids in my application to use built in search fields rather a separate search form. However, when I override the Cell Headers the standard sorting link and icon is understandably gone. Does Tapestry provide any means to include the sorting back into a Cell Header override. If not, what am I looking at in terms of replacing it? I noticed the sort links point to the .grid.columns:sort/ event. Can I possibly create a Link pointing to this event with the appropriate columnName and have it working? I was able to create a Component that takes the columnName as a parameter, writes out an with the href pointing to .grid.columns:sort/columnName. The has a nested tag that pulls its src attribute from a getSortIcon method that returns of of three Assets Injected into the page class corresponding to the same Tapestry icons. Beyond seeming like a hacky component, I don't see how I can manage the image state as it changes from sortable, ascending, and descending since there is no event to handle on a basic . Ideally I could use an action or event link instead allowed me to handle events and change state properly, but to do this I'd need some way of bubbling the event through the grid.columns Sort event, and I haven't been able to find a way to do that yet. The best idea I could come up with was the following, but I'm not surprised it doesn't work. To my understanding the triggerEvent will bubble up from the component to the containing page up through any more pages.. but the Grid wouldn't be along that path. (I replaced the with a to try this, the event fires and the icon updates, but the sort method on the grid is never called and returnObject[0] is null). Code: @Inject private ComponentResources cr; public Object onSortClick(){ final Object[] returnObject = new Object[]{null}; Object[] ctx = new Object[]{ property }; cr.triggerEvent("sort", ctx, new ComponentEventCallback() { public boolean handleResult(final Object result) { if (result != null) { returnObject[0] = result; } return result != null; } }); log.debug("returnObject[0]: " + returnObject[0]); //Changes a @Persist enum that controls a switch for returning the proper Sort Icon Asset getNextSortState(); return returnObject[0]; } Alternately, I'm looking at GridColumns and wonder if it is possible to extend that Component. I'm unsure of how I would use it with a grid though. Worst-case scenario I'm imagining is writing an EventLink per Header and writing custom event handlers that manipulate the data set provided via Property to the source attribute of the Grid. That seems messy and like a lot of work, though. I can't think of how that could be encapsulated into a re-usable Component. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Grid Header Override and Sorting
On 03/14/2011 02:14 PM, Rich M wrote: Hi, I found this thread http://tapestry.markmail.org/thread/ighytyllingci364 that referenced overriding the grid header ala ... , but it seems there was no response. I'm working on overriding the headers for most of the grids in my application to use built in search fields rather a separate search form. However, when I override the Cell Headers the standard sorting link and icon is understandably gone. Does Tapestry provide any means to include the sorting back into a Cell Header override. If not, what am I looking at in terms of replacing it? I noticed the sort links point to the .grid.columns:sort/ event. Can I possibly create a Link pointing to this event with the appropriate columnName and have it working? I was able to create a Component that takes the columnName as a parameter, writes out an with the href pointing to .grid.columns:sort/columnName. The has a nested tag that pulls its src attribute from a getSortIcon method that returns of of three Assets Injected into the page class corresponding to the same Tapestry icons. Beyond seeming like a hacky component, I don't see how I can manage the image state as it changes from sortable, ascending, and descending since there is no event to handle on a basic . Ideally I could use an action or event link instead allowed me to handle events and change state properly, but to do this I'd need some way of bubbling the event through the grid.columns Sort event, and I haven't been able to find a way to do that yet. The best idea I could come up with was the following, but I'm not surprised it doesn't work. To my understanding the triggerEvent will bubble up from the component to the containing page up through any more pages.. but the Grid wouldn't be along that path. (I replaced the with a to try this, the event fires and the icon updates, but the sort method on the grid is never called and returnObject[0] is null). Code: @Inject private ComponentResources cr; public Object onSortClick(){ final Object[] returnObject = new Object[]{null}; Object[] ctx = new Object[]{ property }; cr.triggerEvent("sort", ctx, new ComponentEventCallback() { public boolean handleResult(final Object result) { if (result != null) { returnObject[0] = result; } return result != null; } }); log.debug("returnObject[0]: " + returnObject[0]); //Changes a @Persist enum that controls a switch for returning the proper Sort Icon Asset getNextSortState(); return returnObject[0]; } Alternately, I'm looking at GridColumns and wonder if it is possible to extend that Component. I'm unsure of how I would use it with a grid though. Worst-case scenario I'm imagining is writing an EventLink per Header and writing custom event handlers that manipulate the data set provided via Property to the source attribute of the Grid. That seems messy and like a lot of work, though. I can't think of how that could be encapsulated into a re-usable Component. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Grid Header Override and Sorting
Hi, I found this thread http://tapestry.markmail.org/thread/ighytyllingci364 that referenced overriding the grid header ala ... , but it seems there was no response. I'm working on overriding the headers for most of the grids in my application to use built in search fields rather a separate search form. However, when I override the Cell Headers the standard sorting link and icon is understandably gone. Does Tapestry provide any means to include the sorting back into a Cell Header override. If not, what am I looking at in terms of replacing it? I noticed the sort links point to the .grid.columns:sort/ event. Can I possibly create a Link pointing to this event with the appropriate columnName and have it working? Alternately, I'm looking at GridColumns and wonder if it is possible to extend that Component. I'm unsure of how I would use it with a grid though. Worst-case scenario I'm imagining is writing an EventLink per Header and writing custom event handlers that manipulate the data set provided via Property to the source attribute of the Grid. That seems messy and like a lot of work, though. I can't think of how that could be encapsulated into a re-usable Component. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: tapestry-upload and zones?
Looking through it seems like some browsers (Firefox 3 at the least) have started working file uploads into their APIs so they can be used in AJAX, but I don't believe the cross-browser coverage for that is good enough yet. I was reading into the IFrame solution when I happened upon a comment from someone saying you can return a 204 No Content HTTP Response to prevent a page refresh. Preventing a page refresh would be good enough for my page to continue otherwise functioning asynchronously while still allowing for file uploads. I was able to implement this. I took the upload component out of the AJAX form and created a separate form for it in the block. This form calls an onSuccess method that handles the UploadedFile and then returns a NoContentStreamResponse I wrote up: public class NoContentStreamResponse implements StreamResponse { @Override public String getContentType() { return "text/plain"; } @Override public InputStream getStream() throws IOException { return new ByteArrayInputStream(new byte[]{}); } @Override public void prepareResponse(Response resp) { resp.setStatus(204); resp.setContentLength(0); } } So while it is not exactly asynchronous, it does prevent page refresh (which for me was the main point anyway, avoiding the page render life-cycle), avoids using an i-frame and the extra code wiring to make that work, and more importantly it works. Thought I'd share it in case anyone else comes across a situation similar to mine. On 03/11/2011 04:08 PM, Rich M wrote: Oh... I did not realize that. Great reference, I'll see what I can figure out, thanks! On 03/11/2011 03:17 PM, Thiago H. de Paula Figueiredo wrote: File uploading doesn't work with AJAX without faking it using iframes or using Flash. It doesn't matter if you're using Tapestry or not, this is a limitation of AJAX itself. See this: http://stackoverflow.com/questions/543926/is-it-possible-to-use-ajax-to-do-file-upload. On Fri, 11 Mar 2011 16:40:43 -0300, Rich M wrote: Hi, I've been working on Image file upload and display. With the help of a previous thread, I was able to get a fully working test component that could have a client upload a file from a form, and then have the file saved on the server and rendered back to the client in the browser. I've moved on to integration of this concept into my actual application. I'm having an issue capturing the UploadedFile in any event handlers on a page where the form is within a Zone. The form is also within a Block that is delegated in case that factors in at all. When the form is submitted, the UploadedFile object is null, and thus I cannot handle the object. In my test component, the UploadedFile object resolves to a reference to the Image file uploaded by the client (had they uploaded one and no exception occurred). I did another sanity check by integrating the upload component into another form for the same Entity in my application that is not within a Zone or Block. The UploadedFile object was valid in this page as well after form submit, leaving me to think there is something about the Zone or Block that is interfering with the results I expected. This is how I have been using the Upload component Page: @Property private UploadedFile uploadedFile; public void onSuccess(){ if(uploadedFile == null){ log.debug("Image file was not provided"); }else{ imageManager.saveImage(uploadedFile); } } TML: Also since I'd had a couple threads recently where I had forgot to use the t:zone attribute properly, I tried out t:zone on the upload component to sanity check that as well, but that did not appear to change anything. Is anyone familiar with what challenge(s) I may be facing here in getting the upload to work? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: tapestry-upload and zones?
Oh... I did not realize that. Great reference, I'll see what I can figure out, thanks! On 03/11/2011 03:17 PM, Thiago H. de Paula Figueiredo wrote: File uploading doesn't work with AJAX without faking it using iframes or using Flash. It doesn't matter if you're using Tapestry or not, this is a limitation of AJAX itself. See this: http://stackoverflow.com/questions/543926/is-it-possible-to-use-ajax-to-do-file-upload. On Fri, 11 Mar 2011 16:40:43 -0300, Rich M wrote: Hi, I've been working on Image file upload and display. With the help of a previous thread, I was able to get a fully working test component that could have a client upload a file from a form, and then have the file saved on the server and rendered back to the client in the browser. I've moved on to integration of this concept into my actual application. I'm having an issue capturing the UploadedFile in any event handlers on a page where the form is within a Zone. The form is also within a Block that is delegated in case that factors in at all. When the form is submitted, the UploadedFile object is null, and thus I cannot handle the object. In my test component, the UploadedFile object resolves to a reference to the Image file uploaded by the client (had they uploaded one and no exception occurred). I did another sanity check by integrating the upload component into another form for the same Entity in my application that is not within a Zone or Block. The UploadedFile object was valid in this page as well after form submit, leaving me to think there is something about the Zone or Block that is interfering with the results I expected. This is how I have been using the Upload component Page: @Property private UploadedFile uploadedFile; public void onSuccess(){ if(uploadedFile == null){ log.debug("Image file was not provided"); }else{ imageManager.saveImage(uploadedFile); } } TML: Also since I'd had a couple threads recently where I had forgot to use the t:zone attribute properly, I tried out t:zone on the upload component to sanity check that as well, but that did not appear to change anything. Is anyone familiar with what challenge(s) I may be facing here in getting the upload to work? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
tapestry-upload and zones?
Hi, I've been working on Image file upload and display. With the help of a previous thread, I was able to get a fully working test component that could have a client upload a file from a form, and then have the file saved on the server and rendered back to the client in the browser. I've moved on to integration of this concept into my actual application. I'm having an issue capturing the UploadedFile in any event handlers on a page where the form is within a Zone. The form is also within a Block that is delegated in case that factors in at all. When the form is submitted, the UploadedFile object is null, and thus I cannot handle the object. In my test component, the UploadedFile object resolves to a reference to the Image file uploaded by the client (had they uploaded one and no exception occurred). I did another sanity check by integrating the upload component into another form for the same Entity in my application that is not within a Zone or Block. The UploadedFile object was valid in this page as well after form submit, leaving me to think there is something about the Zone or Block that is interfering with the results I expected. This is how I have been using the Upload component Page: @Property private UploadedFile uploadedFile; public void onSuccess(){ if(uploadedFile == null){ log.debug("Image file was not provided"); }else{ imageManager.saveImage(uploadedFile); } } TML: Also since I'd had a couple threads recently where I had forgot to use the t:zone attribute properly, I tried out t:zone on the upload component to sanity check that as well, but that did not appear to change anything. Is anyone familiar with what challenge(s) I may be facing here in getting the upload to work? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: JasperReports integration
How are you running your webapp. Maven and mvn jetty:run, deployed into some servlet, something else? The answer most likely depends on your answer here. If using Maven, you add the jars as a dependency in the pom.xml like: jasperreports-local jasperreports-local 3.5.0 Otherwise, look up how to add dependencies to your classpath for your servlet container. On 03/11/2011 05:03 AM, degressor wrote: Noob question: how can I add the jars to the webapp classpath? -- View this message in context: http://tapestry.1045711.n5.nabble.com/JasperReports-integration-tp3415368p3424778.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Uploading then displaying Images
Thanks everyone for the responses so far, conceptually I think this is coming together for me. So, I'm glad the context path was not a good idea, it felt dirty from the beginning. Avoiding that, there are two main options: use the database to store/retrieve the images, or use a configured system folder from where I can load/save files with Java IO. Regardless of the option chosen there, the image file will be captured as an InputStream and returned as a StreamResponse in some form to a page/component. As far as linking the StreamResponse to an HTML IMG tag, I believe I understand the various options presented here. LLTYK suggests using an EventLink. I was looking through my code and found a Captcha implementation I have using a propertyExpression in the TML on the src attribute of to reference a getImageLink function that returns ComponentResources.createActionLink("image",null). Then there is an onImage() action handler method that returns a StreamResponse. I understand this is ActionLink and not EventLink, but I think the concept must be nearly identical. Alternately, Thiago is suggesting that instead of using ComponentResources to generate an ActionLink or EventLink, it may be easier to create a seperate Page that handles returning just a StreamResponse. In that case the EventLink can be replaced with a PageLink and using an activation context the ID for the Image can be passed to the Page so it can load the Image, build the StreamResponse, and return it. <30 minutes later> Okay, the PageLink works out, great! I can see the biggest issue I was having was setting up the src attribute for IMG correctly. I was stuck thinking it was either the URL to the context path or the StreamResponse itself, rather than a link to an event or page that returns the StreamResponse. Thanks, Rich On 03/11/2011 08:08 AM, Thiago H. de Paula Figueiredo wrote: On Fri, 11 Mar 2011 09:24:35 -0300, LLTYK wrote: Nobody's mentioned createEventLink. That's where you get the image url, create an event link pointing to the event handler that returns the stream response. I haven't mentioned it because my preferred approach is to create a page just for returning StreamResponses. It's more reusable, as it can be used to serve images for any page, while an event must be only used inside a give page. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Uploading then displaying Images
On 03/10/2011 04:21 PM, Thiago H. de Paula Figueiredo wrote: On Thu, 10 Mar 2011 17:49:14 -0300, Rich M wrote: Okay, that makes sense. Is there a way to use the StreamResponse instead of the URL then to display an image in the browser? Unless you want to generate one of that data URLs (http://en.wikipedia.org/wiki/Data_URI_scheme), you'll need to generate an URL for it just like it was described in the thread you linked. StreamResponses don't have URLs by themselves. My application will be able to more reliably serve the images via the StreamResponse rather than the URL Why? Primarily because I can't think of a reasonable way to build a URL to the file that could actually be served. I wish I was more knowledgeable about servlets and such, but if my application is running from a WAR, how would I get any files into that context? In development I use maven directory structure and the mvn jetty:run command to execute. From here I know I can place files relatively from my context in src/main/webapp/ and serve it as an Asset. However, when I have to deploy it into production and run it as a WAR in stand-alone Jetty, I think this approach is no longer viable. so I'd like to consider that approach, or at least know if how to do it for curiosity sake. Wise words. :) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Uploading then displaying Images
On 03/10/2011 03:17 PM, Thiago H. de Paula Figueiredo wrote: On Thu, 10 Mar 2011 16:37:29 -0300, Rich M wrote: Hi, Hi! I had read this thread http://tapestry.1045711.n5.nabble.com/How-to-display-Blob-byte-array-image-td2436148.html along with other information regarding uploading/displaying images. I think I'm a bit confused as to what my ImageStreamResponse is or should be achieving. I had thought using that I might be able to display the image itself in the TML, but it seems I'd need the URL instead. If I had the URL in any case then what purpose does the ImageStreamResponse serve? None. When you have the image in some public URL, inside or outside your application, you don't need a StreamResponse for it. Just use its URL. StreamResponse is used when you have the content generated on the fly, available as an InputStream or in memory. Okay, that makes sense. Is there a way to use the StreamResponse instead of the URL then to display an image in the browser? My application will be able to more reliably serve the images via the StreamResponse rather than the URL so I'd like to consider that approach, or at least know if how to do it for curiosity sake. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Uploading then displaying Images
Hi, I think I've run into a conceptual understanding roadblock in trying to setup uploading then displaying of images in my application. I've got the uploading part working so far, although since my application is deployed as a WAR, the files upload to a system folder. That works alright, but might be a concern regarding the subsequent displaying. I wrote up a service that can manage these images as Image or File object, and I wrote up an ImageStreamResponse class with its inputStream coming from the Image's outputStream. The service can generate the ImageStreamResponse from a filename, which I store in the database. I had read this thread http://tapestry.1045711.n5.nabble.com/How-to-display-Blob-byte-array-image-td2436148.html along with other information regarding uploading/displaying images. I think I'm a bit confused as to what my ImageStreamResponse is or should be achieving. I had thought using that I might be able to display the image itself in the TML, but it seems I'd need the URL instead. If I had the URL in any case then what purpose does the ImageStreamResponse serve? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Label not displaying it's body
Are you decorating the label or otherwise making use of it as a component, or just using it to display? If you want to give your own value for the label text disaply, why not just use an HTML label like ${myValueHere}. I'm not sure what is going on with your code example because it has a lot of typos, if that was because your email sent in HTML the first time, send it in plain text. I'd at least expect the for=userName to be for="userName" and t:type="TextField" instead of t:type="TextFieldd" for it to be valid XHTML and a valid invisibly instrumented component. -Rich On 03/03/2011 02:30 PM, bogdan_cm wrote: I have this piece of code(only relevant part included): "t:label for=userName> LABEL BODY /t:label" "input type="text" t:id="userName" t:type="TextFieldd" t:value="userName" t:validate="required"/" I would expect, when rendered, to have something like this: LABEL BODY: TEXTFIELD instead, what I have is: User Name TEXTFIELD -> which is what the label displays if there is no body What am i doing wrong here? If I add the body to the app.properties file it get's picked up and put in properly. Only when I provide the label body in the .tml it's behaving unexpectedly, and it's the way I would like it to be as I plan on changing it dynamically like this: ${myValueHere} Thanks, Bogdan. -- View this message in context: http://tapestry.1045711.n5.nabble.com/Label-not-displaying-it-s-body-tp3408519p3408519.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Capturing action, event, form requests
On 03/01/2011 11:26 AM, Thiago H. de Paula Figueiredo wrote: On Tue, 01 Mar 2011 13:03:34 -0300, Rich M wrote: Hi, Hi! I currently have a Dispatcher implementation to handle page and asset requests in order to process authentication and security logic as necessary. However, it appears to me that (at least in 5.1) the Dispatcher does not intercept any ActionLinks, EventLinks, form events, or otherwise related client-side triggers that are not page requests. These scenarios should be handled by implementing one of the Tapestry filter pipelines. Dispatchers are supposed to return content after handling a request. Oh, I see. Perhaps then it's reasonable to say I was mislead by this Tapestry wiki page http://wiki.apache.org/tapestry/Tapestry5HowToCreateADispatcher ? This is pretty much exactly what I adapted to my application half a year ago, 'AccessController' name and all. Is there a service or service interface to implement that would provide an opportunity to step in and intercept these requests before a page/component catches them? Implement a ComponentRequestFilter and contribute it to the ComponentRequestHandler service. Thanks, I'll look into that. Going back and looking at that wiki page though I realized that it was ordering the AccessController with before:PageRender, I switched it to before:RootPath and it seems to now capture the events I was talking about and solved a related problem I had. I am in fact using the Dispatcher to redirect to a login page with an expired context, I suppose I'm not entirely clear yet between the Wiki and my working implementation why Dispatcher isn't appropriate. Perhaps its a case of, 'it will work, but that's not what it was meant for'? Or are there some nuances to the ComponentRequestHandler pipeline that make it a more robust authentication point? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: org.apache.tapestry5.runtime.ComponentEventException
If you want it to return a String, do something like this. Also, @SessionState would not be necessary in a class like this. The @SessionState in your page class(es) will maintain the object for you. public class User { private String user_id; public User getUser_id() { return user_id; } public void setUser_id(String user_id){ this.user_id = user_id; } public void setUser(User user){ this.user_id = user.getUser_id; } } If you haven't already done so at login or something along those lines before a user gets to the page in question, you'll want to do something like the following (maybe in onActivate rather, but I don't know your application) otherwise it would make sense that the @SessionState User user_id is null. @SetupRender void initUser(){ if(user_id == null || user_id.getUser_id() == null){ user_id = new User(); user_id.setUser_id( /* whatever the user_id String would be that you need to set */ ); } } Yes I have a method like that but it keep's returning null, my user class: //These were originally strings but changed in an effort to get working @SessionState private User user_id; public User getUser_id() { return user_id; } public void setUser_id(User user_id) { this.user_id = user_id; } then the in my page: @SessionState private User user; @Property private String user_id; public User getUser() { return user; } public void setUser(User user) { this.user = user; } prep.setString(1, user_id); - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Capturing action, event, form requests
Hi, I currently have a Dispatcher implementation to handle page and asset requests in order to process authentication and security logic as necessary. However, it appears to me that (at least in 5.1) the Dispatcher does not intercept any ActionLinks, EventLinks, form events, or otherwise related client-side triggers that are not page requests. Is there a service or service interface to implement that would provide an opportunity to step in and intercept these requests before a page/component catches them? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [5.1] recordError for Forms in Blocks
On 02/25/2011 06:17 PM, Josh Canfield wrote: I grabbed your code and ran it. I'm not 100% sure what's supposed to happen if you perform an ajax post but don't return anything, but have errors. Me neither, I suppose I expected that simply using the recordError would have my page functioning the same way the POST would without AJAX, but that's a bit naive I added a handler for failure and returned the same block back and it seems to do the right thing. Is the form supposed to just send back the errors if it fails? Block onFailure() { log.debug("Failed form post"); return resources.findBlock("triggerPrice"); } Yes, the form is supposed to send back just errors if it fails. I think using onFailure is my best solution at this point, I didn't realize I could catch onFailure and return a Block/Page/etc, I think I had become reliant on using onValidate and recordError to do as much for me in the rest of the pages I wrote. I tried the onFailure returning the findBlock("triggerPrice") from ComponentResources as well as using blockZone.getBody(). In both of those cases, the page re-rendered with the Tapestry red X beside the form input field in error, but the Validation Bubbles did not appear. I've decided to save myself some trouble and use onFailure to return the page by String name so the full reload occurs and the Validation Bubbles show. Thanks for the help, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [5.1] recordError for Forms in Blocks
Hmm, no luck. I checked the error console and nothing came up. Looked at the Request and Response sent in Firebug console, the Response is 200 OK and the response body is {}. Threw in a handful of breakpoints in Tapestry.js in places that seemed relevant to the Validation Bubbles but never saw anything too interesting come up. I'd willingly look deeper, but I'm not too sure what I'm looking for at this point. On 02/25/2011 03:02 PM, Howard Lewis Ship wrote: User Firefox or Chrome and monitor your JavaScript console; most likely there's a JavaScript error somewhere on the page that's preventing normal initialization logic for occurring. On Fri, Feb 25, 2011 at 11:08 AM, Rich M wrote: Does anyone have insight into what I might be missing here? As I mentioned clicking the form submit will not render the validation bubbles, but if I click the form submit and then reload the URL in the browser the page re-renders and the validation bubbles show up. Does something about the form being part of a zone update versus a page render change the behavior or lack thereof of validation bubbles? Thanks, Rich On 02/24/2011 05:02 PM, Rich M wrote: Hi, I'm having a hard time tracking down my issue at hand here. I have Form components defined in a set of Block components in a Page class. The entire set of Blocks is nested within a Zone that allows for navigation between the Blocks without a page refresh. Each form has supporting onValidateXXX(Object xxx) methods for most of the fields. When I submit a given form within one of the related fields in error, my debugging statements reveal that the expected onValidateXXX(Object xxx) method(s) are called in the Page class. Likewise, the form fails to submit when I use the recordError method of the Form components. However, the Validation Bubbles are failing to display despite being designated for the related fields. Maybe I'm overlooking something here. A simplified code example TML and Page class below. Thanks, Rich TML: ${message:discountPercentage-help} ${message:discountPercentage-label} Page Class: @Inject private Messages messages; @InjectComponent private Form tPriceForm; @Component(id="discountPercentage") private TextField discountPercentageField; @Inject private Block triggerPrice; @Persist private Block selectedBlock; @InjectComponent private Zone blockZone; void onValidateFromDiscountPercentage(Double percent){ if(percent< 0 || percent> 100.0){ debug("Attempted to be created with a discount percentage of: " + percent); tPriceForm.recordError(discountPercentageField, messages.get("percentage-out-of-bounds")); return; } } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [5.1] recordError for Forms in Blocks
Does anyone have insight into what I might be missing here? As I mentioned clicking the form submit will not render the validation bubbles, but if I click the form submit and then reload the URL in the browser the page re-renders and the validation bubbles show up. Does something about the form being part of a zone update versus a page render change the behavior or lack thereof of validation bubbles? Thanks, Rich On 02/24/2011 05:02 PM, Rich M wrote: Hi, I'm having a hard time tracking down my issue at hand here. I have Form components defined in a set of Block components in a Page class. The entire set of Blocks is nested within a Zone that allows for navigation between the Blocks without a page refresh. Each form has supporting onValidateXXX(Object xxx) methods for most of the fields. When I submit a given form within one of the related fields in error, my debugging statements reveal that the expected onValidateXXX(Object xxx) method(s) are called in the Page class. Likewise, the form fails to submit when I use the recordError method of the Form components. However, the Validation Bubbles are failing to display despite being designated for the related fields. Maybe I'm overlooking something here. A simplified code example TML and Page class below. Thanks, Rich TML: ${message:discountPercentage-help} ${message:discountPercentage-label} t:validate="required" /> Page Class: @Inject private Messages messages; @InjectComponent private Form tPriceForm; @Component(id="discountPercentage") private TextField discountPercentageField; @Inject private Block triggerPrice; @Persist private Block selectedBlock; @InjectComponent private Zone blockZone; void onValidateFromDiscountPercentage(Double percent){ if(percent < 0 || percent > 100.0){ debug("Attempted to be created with a discount percentage of: " + percent); tPriceForm.recordError(discountPercentageField, messages.get("percentage-out-of-bounds")); return; } } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Select with zone failing intermittently
I can't say with any certainty this is your problem, but the one time I was having issues with an AJAX request being dumped and never showing up server side there was a race condition. I had it listening to the click event of a submit button, and on slower connections the form submit would beat out the AJAX request to the server. In your case I could see the Periodic update (assuming its on the same page) creating some sort of race condition. Worth considering if so. Here is the link to the thread on this list so you can compare and see if your code is similar: http://tapestry.markmail.org/thread/6nlztv5dlv4pix77 Regards, Rich On 02/25/2011 10:35 AM, Bryan Lewis wrote: To follow up... moving the first select out of the zone didn't help. I didn't see how it would, was grasping at straws. I finally avoided the problem by getting rid of the chained selects. I went back to our older component that does the chaining with simple javascript (stuffing all the possible selection lists into the html which works okay if they're not huge), so there's no ajax request on the first select. The second select does an onchange form submit. Crude and a bit slower but it works. In other words it stumped me. Maybe some day someone else will see this posting and have an insight. On Fri, Feb 25, 2011 at 10:24 AM, Bryan Lewis wrote: Nope. In the failing cases, the ajax request did not arrive at my AppModule's request filter. That's why the Select's onValueChanged() isn't getting called. I don't think it's a case of Tapestry dropping the request after it gets it. On Fri, Feb 25, 2011 at 6:41 AM, Ulrich Stärk wrote: Can you see the request hitting the server after the first zone's value is changed? Uli On 24.02.2011 23:43, Bryan Lewis wrote: I've been trying to figure out a weird bug today, and before I lose the night over it I thought I'd ask the list. I'm using the cool new "chained select" feature. One Select has a zone, and triggers an onValueChanged() method that affects another Select. It works fine on my machine and when most users try it. When the first selection changes the server gets the method call and the zone updates, no problem. We have a few users in a remote office who access the application through a slightly slow connection to a Citrix server. That is, the browser is actually running here (in the same network as the app server) and the user receives only screen updates. Occasionally these users will see that the chained selects don't work at all. I've debugged it a little (kinda difficult since I can't make it happen locally) and the first Select's method call doesn't happen. I don't think it's only a case of slowness -- I waited about ten seconds. Does this ring any bells? I can't see how the Citrix factor or the connection speed would have any effect. The app server and browser are in the same network. Other requests are working fine; the app has been running almost a year. I have a periodic-update ajax request that successfully makes it to the server for the same user. So maybe I'm using the new feature incorrectly. .tml: Recipients .java: private final SelectModel carrierModel = new AbstractSelectModel() { // Omitting null-returning getOptionGroups() for simplicity public List getOptions() { List carriers = getModel().getCarriers(); // sorted by name List options = CollFactory.newList(carriers.size()); for (Company carrier : carriers) { options.add(new OptionModelImpl(carrier.getCarrierShortName(), carrier)); } return options; } }; public SelectModel getCarrierModel() { return carrierModel; } public Object onValueChangedFromCarrierSelect(Company carrier) { debug("-- onValueChangedFromCarrierSelect " + carrier.getCarrierShortName()); selectedCarrier = carrier; return recipientZone.getBody(); } To be clear: In the real app, the recipientSelect also has a zone parameter to update a third list. I omitted it here because the bug happens before that. The only thing I can see that I'm doing different from the documented example is, my selects are in the same zone. I'll try splitting them up and using a MultiZoneUpdate or some such. Thanks for any ideas. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
[5.1] recordError for Forms in Blocks
Hi, I'm having a hard time tracking down my issue at hand here. I have Form components defined in a set of Block components in a Page class. The entire set of Blocks is nested within a Zone that allows for navigation between the Blocks without a page refresh. Each form has supporting onValidateXXX(Object xxx) methods for most of the fields. When I submit a given form within one of the related fields in error, my debugging statements reveal that the expected onValidateXXX(Object xxx) method(s) are called in the Page class. Likewise, the form fails to submit when I use the recordError method of the Form components. However, the Validation Bubbles are failing to display despite being designated for the related fields. Maybe I'm overlooking something here. A simplified code example TML and Page class below. Thanks, Rich TML: ${message:discountPercentage-help} ${message:discountPercentage-label} t:validate="required" /> Page Class: @Inject private Messages messages; @InjectComponent private Form tPriceForm; @Component(id="discountPercentage") private TextField discountPercentageField; @Inject private Block triggerPrice; @Persist private Block selectedBlock; @InjectComponent private Zone blockZone; void onValidateFromDiscountPercentage(Double percent){ if(percent < 0 || percent > 100.0){ debug("Attempted to be created with a discount percentage of: " + percent); tPriceForm.recordError(discountPercentageField, messages.get("percentage-out-of-bounds")); return; } } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [5.1] NPE when re-rendering Zone with Blocks containing Forms
Ah, thanks for the example! It was obvious right away what I was doing wrong. Turned out to be I simply forgot the t:zone parameter for the Form and ActionLink components encapsulated by the Zone, which would explain why Tapestry had been complaining when I was doing zone.getBody() as returns from the Event methods before. Thanks, Rich On 02/23/2011 02:49 PM, Josh Canfield wrote: Hi, I'm getting the following error I can't reproduce the error. Can you create a cut down version that causes the problem? Here is my attempt to recreate. @Property private String blockId = "one"; @Component private Zone blockZone; @Component private Form oneForm; @Property private String oneText; @Component private Form twoForm; @Property private String twoText; @Inject private ComponentResources resources; public Block onSuccessFromOneForm() { blockId = "two"; return blockZone.getBody(); } public Block onSuccessFromTwoForm() { blockId = "one"; return blockZone.getBody(); } public Block getTheBlock() { return resources.getBlock(blockId); } One Two Josh On Wed, Feb 23, 2011 at 10:52 AM, Rich M wrote: Hi, I'm getting the following error Caused by: java.lang.NullPointerException at org.apache.tapestry5.corelib.components.Form._$environment_read_renderSupport(Form.java) at org.apache.tapestry5.corelib.components.Form.beginRender(Form.java:245) at org.apache.tapestry5.corelib.components.Form.beginRender(Form.java) when I re-render the main zone in my page from an ActionLink or FormSuccess event method. More about my page: The page is divided into 8 blocks, and 6 of the blocks encapsulate a form, as such: ... When first loading the page, it delegates to the first block. You can fill out the form and then submit the form. Upon submitting the form, it triggers the onSuccessFromForm method, which updates the Block for the Delegate and returns the zone component. At this point, I get the NullPointerError which points directly to the line in the TML file declaring the in the Block that should now be delegated to. I declare the t:id of the form and in the page class each Form is declared as a private Form with the @Component annotation. Any help or advice would be appreciated. I have used the Zone/Block/Event-Method strategy in another Component of mine successfully, but the Blocks in that Component never contained Form components, which seems to be the added complication. Also, I had the Events working when I just returned the page class itself by String reference, but I'd prefer to update the Zone over reload the Page each time. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
[5.1] NPE when re-rendering Zone with Blocks containing Forms
Hi, I'm getting the following error Caused by: java.lang.NullPointerException at org.apache.tapestry5.corelib.components.Form._$environment_read_renderSupport(Form.java) at org.apache.tapestry5.corelib.components.Form.beginRender(Form.java:245) at org.apache.tapestry5.corelib.components.Form.beginRender(Form.java) when I re-render the main zone in my page from an ActionLink or FormSuccess event method. More about my page: The page is divided into 8 blocks, and 6 of the blocks encapsulate a form, as such: ... When first loading the page, it delegates to the first block. You can fill out the form and then submit the form. Upon submitting the form, it triggers the onSuccessFromForm method, which updates the Block for the Delegate and returns the zone component. At this point, I get the NullPointerError which points directly to the line in the TML file declaring the in the Block that should now be delegated to. I declare the t:id of the form and in the page class each Form is declared as a private Form with the @Component annotation. Any help or advice would be appreciated. I have used the Zone/Block/Event-Method strategy in another Component of mine successfully, but the Blocks in that Component never contained Form components, which seems to be the added complication. Also, I had the Events working when I just returned the page class itself by String reference, but I'd prefer to update the Zone over reload the Page each time. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: EventLink URI and loop component
On 02/18/2011 12:59 PM, Thiago H. de Paula Figueiredo wrote: On Fri, 18 Feb 2011 15:45:54 -0200, Rich M wrote: The challenge in your case is I don't believe you can dynamically assign a component ID. I double checked myself just now, and t:id only took a discrete ID (in 5.1.0.5), and was not happy pulling it from a property or other dynamic means. Static structure is not possible with dynamic component ids. I think the issue here is forgetting the event instance and relying only on passing information to the event handler method (in this case, using the context). I fully agree, my answer was convoluted in attempts to reference the broader scope of challenges faced when dealing with the static structure of a component enclosed within a loop. The concept of static structure, given a full understanding, makes the proper use of components in a Loop clear. However, I still think for someone coming to Tapestry it is likely to think of loops in the Java sense where each iteration is fresh (loop-declared objects/variables are unique between iterations, etc). It would be worthwhile to clarify the implications of static structure in loops where users are most likely to confuse a need for dynamic behavior with dynamic structure based on prior experiences with loops. Perhaps I haven't found the right documentation page, but I can't readily find much explanation of static structure and its implications in the Tapestry site documentation on pages where I might expect it. Regards, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: EventLink URI and loop component
Hi, I believe this is a common stumbling point with Loops in Tapestry and the relation to static structure. Tapestry is able to set distinct component IDs in the first case because there is a definition for each facetbox component in your TML. However, in the version with the loop, there is only one facetbox statically defined in the TML, so it is given one component ID by Tapestry (as it seems one is not explicitly being provided). Think about it from the aspect of connecting to the component(s) from your Page/Component class. If you used @InjectComponent, what would be the difference in referencing your facetbox(es) between using the loop and not? In many cases, people want distinct attributes for a given component defined within a Loop. There is a recent thread ( http://markmail.org/message/uwcpkn5s6k2azrpw ) in the list about making the Zone ID attribute distinct between the actual instances of a component declared within a Loop. I've also seen similar solutions in the list for Client ID and so on. The challenge in your case is I don't believe you can dynamically assign a component ID. I double checked myself just now, and t:id only took a discrete ID (in 5.1.0.5), and was not happy pulling it from a property or other dynamic means. Therefore, the solutions for Zone ID and Client ID being dynamically assigned from a getXXX() property method does not seem viable to port over to Component ID. This leads to Thiago's example of using the EventLink's context parameter. I believe in order to make use of the context parameter here, the concept of the FacetBox will need to change from being the Box of a unique Facet to being a Box that will handle any Facet that is passed in to its context. As a result, instead of the method your EventLink triggers implicitly understanding the Facet it should work with, it will need to explicitly load the Facet from the information in the context parameter. *Aside: I referenced the FAQ page, as well as the Component Reference pages for Loop and AjaxFormLoop on the Tapestry site, but couldn't find any direct mentions of enabling controlled, dynamic attributes for a looped component. It seems this question gets asked enough in one form or another in this list to warrant some attention on one or all of those pages. Specifically in regards to the best practices for giving dynamic values to some attributes, clarifying that the component ID/component itself is going to be static, and detailing the implications of static structure and Loops. Regards, Rich On 02/18/2011 11:26 AM, Erik Fäßler wrote: Hey there, It seems I have a problem with tapestry's internal component IDs when using a loop. I have component called facetbox. As I have several facets, I need several FacetBoxes: In each facetbox there exists at least one EventLink component which triggers an event in the corresponding facetbox. So far so good, everything works. But know I'd like to make things more generic. I would like to be able to change my facets easily e.g. by defining a list containing all currently available facets. I use a loop component to create just the facets available: I did not change anything else. Now, my EventLink components inside of the facets won't work correctly anymore. The EventLinks created in the _first_ example looked like this: /hits.tabs.facetbox:termselect/ /hits.tabs.facetbox_0:termselect/ /hits.tabs.facetbox_1:termselect/ ... In the _second_ example, the links look like this: /hits.tabs.facetbox:termselect/ /hits.tabs.facetbox:termselect/ /hits.tabs.facetbox:termselect/ ... You will notice that the internal ID identifying the component is gone. As a consequence, the event "termselect" is always triggered in the first facetbox instead of the one defining the EventLink. I hope I made my problem clear. I just missed something I guess and would be glad if you could help me out. Thanks a lot for any help! Best regards, Erik - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Regarding overlay image in tapestry
Hi, still trying to clarify in my head what you are trying to do, but almost all of that functionality would still be HTML using CSS. I'm guessing you are laying a link element over the image element you have (or making the img the CSS background-image of a link element). The only difference with plain old HTML and Tapestry then would be to consider using a pagelink component to build a link to your next Tapestry page. Alternately, if you are going to be making a whole lot of these playbutton image links, you can make your own component that does all the above on its own, and then just include that component as an element in your TML file for the page. -Rich On 02/09/2011 05:13 PM, sarov saravanan wrote: Hi, I am just trying to display a playbutton image over a list of main images, That is you see list of images on a page and each will have a playbutton image over it which on clicking leads to another page. Is there anyway I can do this in tapestry as we do like in html using css. Any help or suggestion is appreciated! Thanks! with regards, Saravanan.N No need to miss a message. Get email on-the-go with Yahoo! Mail for Mobile. Get started. http://mobile.yahoo.com/mail - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Simple radiogroup question
Here is some code I recently used with a RadioGroup and two buttons. Mine is tailored to decide whether a user wants to be contacted by Phone or E-Mail, but I'm sure you can adapt. The key for me was using an Enum as the value on the RadioGroup and as the value of each Radio. ContactBy.java: public enum ContactBy { EMAIL, PHONE } Page.java: @Component(id="contactPhone") private Radio contactPhoneField; @Component(id="contactEmail") private Radio contactEmailField; @Component(id="contactBy") private RadioGroup contactByField; @Property @Persist private ContactBy contactBy; public ContactBy getContactByPhone(){ return ContactBy.PHONE; } public ContactBy getContactByEmail(){ return contactBy.EMAIL; } @SetupRender void setupRender(){ contactBy = ContactBy.EMAIL; } private void onValidateFromContactBy(String sel){ if(ContactBy.PHONE.toString().equals(sel)){ phoneRequired = true; emailRequired = false; }else{ emailRequired = true; phoneRequired = false; } } Page.tml: ${message:contact-by-email-label}t:type="Radio" t:id="contactEmail" value="contactByEmail" onclick="setEmail()" /> ${message:contact-by-phone-label}t:type="Radio" t:id="contactPhone" value="contactByPhone" onclick="setPhone()" /> Hope that helps, Rich On 02/09/2011 12:26 PM, hese wrote: thanks. but, i saw this example and it doesn't talk about how to check a particular button in the group. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [5.1] Confusing ZoneUpdater behavior
On 01/26/2011 07:32 PM, Josh Canfield wrote: On my local machine, it runs as expected. I take in parameters from a TML declaration of the mixin on a Submit button. I have it bind via Prototype to the mouseup event to fire a method that returns via AJAX back to the Page class. I just re-read your original post. Are you canceling the form submit when you handle the mouseup? Ah, no, that seems like the exceedingly logical thing to do though. I had basically set it so the mixin would set the Page variable, so although the form always submitted, it had a line of logic to read the page variable and know when to stop itself and return out before processing DB entities and such. I inserted some simple JS after the ZoneManager call that wastes half a second of time. That seemed to be ample time to allow the ZoneManager update to trigger the event before the form submission. Do you think 500 ms is excessive waiting time here? I'm not sure how you're code works, but instead I'd fix the issue by preventing the form from being submitted when you capture the mouseup, and then do the re-post the form in Javascript when you know it's what needs to get done. Putting in pauses is the kind of workaround that's likely to bite you later when the timing changes again. I seem to recall something like this coming up on the list before, there might be existing code for an ajax enabled confirmation dialog. A quick google didn't find it, but you might have more luck if you're more persistent. Josh Gotcha. I do like the sound of that solution better, albeit it is more complicated (in terms of what I know how to do and don't know how to do). I'm a bit lost as to what I'd need to do to make this happen. I suppose it won't require a ZoneManager update for one thing, since this solution avoids interacting back with the server. Is there a way to hook up the mixin to the Submit so that it can return false for the onsubmit event of the Submit element? That seems like probably the most straightforward solution I can think of to stop the form, unless there's a Tapestry way of canceling the event that calls back to the Page class onPrepare/onSuccess methods. I found this thread ( http://tapestry.1045711.n5.nabble.com/quot-Confirm-quot-mixin-won-t-cancel-when-in-zone-td2436465.html ) which seems similar, but wasn't quite able to parse out the necessary javascript concepts I'd need to get what I'm looking for. Furthermore, that code is for an EventLink, I've got a Submit element, and that thread seemed to make reference to a distinct differentiation between the two scenarios. Also looks like I was asking about this months ago heh ( http://tapestry.markmail.org/search/?q=cancel%20form%20submission#query:cancel%20form%20submission%20order%3Adate-backward+page:2+mid:wi2l27jeaezsaoo3+state:results ) but I guess I never really figured out the problem at hand back then. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [5.1] Confusing ZoneUpdater behavior
Oh wow, I never thought of that.. so it was racing between triggering the zone event and the form submission then I'm guessing? I tried moving a single breakpoint to the ZoneManager call and then resuming the JS again. That wasn't working in Firebug, the only way was if I stepped past the ZoneManager call before resuming. That was enough for me to believe it was some timing problem. I inserted some simple JS after the ZoneManager call that wastes half a second of time. That seemed to be ample time to allow the ZoneManager update to trigger the event before the form submission. Do you think 500 ms is excessive waiting time here? Thanks for pointing that out, Josh, would have never occurred to me! thanks, Rich On 01/25/2011 09:27 PM, Josh Canfield wrote: Sounds like it could be a timing issue. Have you tried putting debug statements around the in code instead of stepping through with the debugger? Sometimes slowly stepping through code gives things a chance to complete that wouldn't otherwise, possibly it runs fast enough on your local machine that you don't notice the problem? Josh On Tue, Jan 25, 2011 at 11:13 AM, Rich M wrote: Hi, I wrote up a mixin that does delete confirmation. I'd put it through testing a while back and everything seemed fine. Recently it has turned up that it's functioning very strangely. On my local machine, it runs as expected. I take in parameters from a TML declaration of the mixin on a Submit button. I have it bind via Prototype to the mouseup event to fire a method that returns via AJAX back to the Page class. An event handler in the Page class reads the parameter from the Request and determines whether or not the user decided to Delete or not. This value is persisted, and in the event handler method for the form itself, it will bypass deletion based on this boolean. Clicking cancel cancels out of the deletion. Clicking okay continues through with the deletion. Now its different a production server, which is no different that local other than that it is deployed as a WAR rather than using mvn jetty:run. Here if you just navigate to the page, the event handler in the Page class for the AJAX/ZoneUpdater is never called unless you use Firebug and walk through the Javascript method that feeds the update request. In every single case using Firebug to walk through, the event handler in the Page class DOES get called. Note that it always pops up a Javascript confirm box, but only hooks up through the ZoneUpdater event handler if I walk through in Firebug. I'm pretty baffled as to why walking through in Firebug gets the call to work, but standard browser operation doesn't. For clarification, the life-cycle of the persisted Boolean in the Page class that the form uses is as follows: @Persist private Boolean delete_confirm; onPrepare() -> if delete_confirm == null then delete_confirm = false; // to prevent accidental deletes onDeleteConfirm() -> ZoneUpdater event handler, delete_confirm = Boolean.parseBoolean(request_parameter); onSuccessFromForm() -> if(!delete_confirm) return; //exit out of form if we arent confirming the deletion Any insight? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [5.1] Confusing ZoneManager behavior
Hi, got my terms mixed up. ZoneUpdater is a popular mixin that I've used as a model for some of mine. ZoneManager is what I'm actually using here, specifically zoneManager.updateFromURL(updatedUrl); Sorry for the confusion. -Rich On 01/25/2011 02:13 PM, Rich M wrote: Hi, I wrote up a mixin that does delete confirmation. I'd put it through testing a while back and everything seemed fine. Recently it has turned up that it's functioning very strangely. On my local machine, it runs as expected. I take in parameters from a TML declaration of the mixin on a Submit button. I have it bind via Prototype to the mouseup event to fire a method that returns via AJAX back to the Page class. An event handler in the Page class reads the parameter from the Request and determines whether or not the user decided to Delete or not. This value is persisted, and in the event handler method for the form itself, it will bypass deletion based on this boolean. Clicking cancel cancels out of the deletion. Clicking okay continues through with the deletion. Now its different a production server, which is no different that local other than that it is deployed as a WAR rather than using mvn jetty:run. Here if you just navigate to the page, the event handler in the Page class for the AJAX/ZoneUpdater is never called unless you use Firebug and walk through the Javascript method that feeds the update request. In every single case using Firebug to walk through, the event handler in the Page class DOES get called. Note that it always pops up a Javascript confirm box, but only hooks up through the ZoneUpdater event handler if I walk through in Firebug. I'm pretty baffled as to why walking through in Firebug gets the call to work, but standard browser operation doesn't. For clarification, the life-cycle of the persisted Boolean in the Page class that the form uses is as follows: @Persist private Boolean delete_confirm; onPrepare() -> if delete_confirm == null then delete_confirm = false; // to prevent accidental deletes onDeleteConfirm() -> ZoneUpdater event handler, delete_confirm = Boolean.parseBoolean(request_parameter); onSuccessFromForm() -> if(!delete_confirm) return; //exit out of form if we arent confirming the deletion Any insight? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
[5.1] Confusing ZoneUpdater behavior
Hi, I wrote up a mixin that does delete confirmation. I'd put it through testing a while back and everything seemed fine. Recently it has turned up that it's functioning very strangely. On my local machine, it runs as expected. I take in parameters from a TML declaration of the mixin on a Submit button. I have it bind via Prototype to the mouseup event to fire a method that returns via AJAX back to the Page class. An event handler in the Page class reads the parameter from the Request and determines whether or not the user decided to Delete or not. This value is persisted, and in the event handler method for the form itself, it will bypass deletion based on this boolean. Clicking cancel cancels out of the deletion. Clicking okay continues through with the deletion. Now its different a production server, which is no different that local other than that it is deployed as a WAR rather than using mvn jetty:run. Here if you just navigate to the page, the event handler in the Page class for the AJAX/ZoneUpdater is never called unless you use Firebug and walk through the Javascript method that feeds the update request. In every single case using Firebug to walk through, the event handler in the Page class DOES get called. Note that it always pops up a Javascript confirm box, but only hooks up through the ZoneUpdater event handler if I walk through in Firebug. I'm pretty baffled as to why walking through in Firebug gets the call to work, but standard browser operation doesn't. For clarification, the life-cycle of the persisted Boolean in the Page class that the form uses is as follows: @Persist private Boolean delete_confirm; onPrepare() -> if delete_confirm == null then delete_confirm = false; // to prevent accidental deletes onDeleteConfirm() -> ZoneUpdater event handler, delete_confirm = Boolean.parseBoolean(request_parameter); onSuccessFromForm() -> if(!delete_confirm) return; //exit out of form if we arent confirming the deletion Any insight? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter element and IE8
On 01/04/2011 05:14 PM, Thiago H. de Paula Figueiredo wrote: On Tue, 04 Jan 2011 19:44:34 -0200, Rich M wrote: Hi, Hi! The issue here being that in IE8 the ' characters got written out as &' This isn't a problem with Tapestry. IE doesn't handle HTML entities as it should. In addition, use JavaScript event observers instead of adding them as onXXX attributes. That's the recommended (and less error-prone) way. Using a Mixin with @MixinAfter to initialize an Event.observe in Javascript worked to replace the previous error-prone method I mentioned. As always, Thiago, you have a great way of concisely knocking some sense into my code/mindset. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Tapestry 5 and W3C HTML Validation
I see some of your points. The W3C one is supposed to be an XHTML validator.. I've run both XHTML 1.0 Strict and XHTML 1.0 Transitional, but I think you're right in saying it doesn't pick up the Tapestry XML namespace. I am, however, validating the final HTML output. I point the url to the page and it loads the page and runs on the generated HTML. The nesting of the tags still seems a valid point, unless I'm still missing something here or writing the tags wrong. If you are interested in seeing what I'm talking about, here is a link to the validation I see: http://validator.w3.org/check?uri=https%3A%2F%2Fwww.moremagicpoints.com%2Fmloyalty%2Findex&charset=%28detect+automatically%29&doctype=Inline&ss=1&outline=1&group=0&user-agent=W3C_Validator%2F1.1 -Rich On 01/04/2011 12:51 PM, Thiago H. de Paula Figueiredo wrote: On Tue, 04 Jan 2011 15:14:00 -0200, Rich M wrote: Hi, Hi! I searched through the mailing list and the last thread on this topic seems to date back to 2006. First, I'd like to know what the expected doctype is, is it XHTML 1.0 Transitional, XHTML 1.0 Strict, or something else? Tapestry doesn't make any assuptions on the doctype. Tapestry can output HTML (default) or XML syntax documents. Also, the best reference I've seen for using Layout components to structure a site is along the lines of having a Layout.tml start with a http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";> tag, then all Templates using it also starting with t:type="Layout" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>. HTML Validation complains about nested tags. Tapestry templates are XML files and most HTML validation tools don't understand XML namespaces. Have you tried to find and use XHTML validators? So I guess I'm partly wondering if W3C HTML Validation is achievable, or if I need to learn to distinguish the exceptions from my own issues? You seem to be validating the templates themselves instead of the generated HTML. I've got some CSS and HTML bugs I need to work through and the Web Design people helping me are throwing a fuss about the HTML and so on. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
MarkupWriter element and IE8
Hi, I noticed strange behavior with Internet Explorer 8 and some MarkupWriter output into HTML using the element method. I have the following in my page class: writer.element("a","href",formEvent,"id","submitPrefs","onclick", "javascript:setupSubmit(this,'"+(overrideParentPage==null?"":overrideParentPage)+"');"); in FireFox this renders as (when overrideParentPage = OverviewTab): Save Preferences This was what I expected. However, in IE 8 it renders as this: http://localhost/mloyalty/cai/index/catchoose:savepreferences";>Save Preferences The issue here being that in IE8 the ' characters got written out as &' The setupSubmit script is vital to functionality, anyone have any insight into this issue? Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Tapestry 5 and W3C HTML Validation
Hi, I searched through the mailing list and the last thread on this topic seems to date back to 2006. First, I'd like to know what the expected doctype is, is it XHTML 1.0 Transitional, XHTML 1.0 Strict, or something else? Also, the best reference I've seen for using Layout components to structure a site is along the lines of having a Layout.tml start with a http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";> tag, then all Templates using it also starting with t:type="Layout" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>. HTML Validation complains about nested tags. Complaints for invalid attributes (like the ones for tapestry components, ie beaneditform -> include, add, reorder, etc.) I'm assuming should be ignored as they are vital to the framework. So I guess I'm partly wondering if W3C HTML Validation is achievable, or if I need to learn to distinguish the exceptions from my own issues? I've got some CSS and HTML bugs I need to work through and the Web Design people helping me are throwing a fuss about the HTML and so on. Thanks, Rich - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
Oh, okay, that works great. Guess I got my mindset too narrow to see that, thanks. One more thing, the FormEventLink that is generated doesn't always play nice. Two scenarios (the Component with the FormEventLink will be called EventComponent): 1. A Page class contains reference to the EventComponent in the TML. The EventLink generated in the HTML builds a proper URI for this page class and everything works. 2. A main Page class delegates a section of its TML to another Page class, which is dynamic. This delegated Page class contains reference to the EventComponent in the TML. The EventLink generated in the HTML builds an incorrect URI for this page class. It builds one referencing the Main Page, while the EventComponent is only known to and a part of the Delegate Page. To solve #2 temporarily, I was able to re-write the URI from the generated EventLink to reference the correct component. First I got it working using new LinkImpl, but since that is an internal class, I opted for a Javascript rewrite instead. I couldn't find any other way of regenerating the link though... Not sure if there is one? Thanks, Rich On 12/22/2010 02:42 PM, Thiago H. de Paula Figueiredo wrote: On Wed, 22 Dec 2010 17:05:22 -0200, Rich M wrote: I suppose this is where I am confused. I currently use JavaScript to write the query parameter into the activation context of the EventLink. What I'm suggesting you is to *not* use the context as the way of passing information to your event handler method. You'd use a query parameter added through JavaScript instead. Example: your generated link is /page.event. When the field value is changed, you change the URL to /page.event?value=. My logic was that the EventLink triggers the Event Handler method, while the form submission puts the hidden input into the Request parameters. This isn't needed nor guaranteed to work in order. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
On 12/22/2010 01:44 PM, Thiago H. de Paula Figueiredo wrote: On Wed, 22 Dec 2010 16:05:15 -0200, Rich M wrote: Hmm, I'd tried that several ways, every time the ParameterNames() list was empty and I couldn't fetch the parameter I was looking for. I tried peeking the Request parameters in the Event method as well as @SetupRender. Are you sure you added the query parameters to the URL generated by ComponentResources.create*EventLink() using JavaScript? Or at least you added this values as hidden fields? I suppose this is where I am confused. I currently use JavaScript to write the query parameter into the activation context of the EventLink. This is what is very messy as described before. The query parameter is pulled from the hidden input field in the enclosing form. The javascript method setupSubmit takes care of converting the value of the hidden input field into the activation context of the URL for the EventLink. The one with the "productsList" id will have the query parameter in its value attribute. There was an additional complication with submitting the HTML form and the EventLink at the same time. Why would you do both at the same time? My logic was that the EventLink triggers the Event Handler method, while the form submission puts the hidden input into the Request parameters. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
Hmm, I'd tried that several ways, every time the ParameterNames() list was empty and I couldn't fetch the parameter I was looking for. I tried peeking the Request parameters in the Event method as well as @SetupRender. There was an additional complication with submitting the HTML form and the EventLink at the same time. I had thought wrapping the HTML form submit inside the EventLink might work, but this submits the event twice it seems. Here's some code relating to the form and EventLink that might illuminate things: w.element("form", "id", "prefForm", "method", "post"); w.element("center"); w.element("input", "type", "hidden", "id", "productsList", "value", ""); //This is the field to pass to Event Handler w.end(); Link formEvent = cr.createFormEventLink("SavePreferences", new Object[]{}); w.element("a","href",formEvent,"id","submitPrefs","onclick","javascript:setupSubmit(this);"); w.element("input", "type", "submit", "value", ms.get("save-rewards-preferences")); w.end(); //submit w.end(); //formEventLink w.end(); //center w.end(); //form On 12/22/2010 12:55 PM, Thiago H. de Paula Figueiredo wrote: On Wed, 22 Dec 2010 15:42:21 -0200, Rich M wrote: I don't have the option of using 5.2 at this point, so that seems to leave out @RequestParameter and @ActivationRequestParameter. What might my other options be for passing back the value attribute from an HTML tag to the Component Event method? Just @Inject Request and use it's getParameter() method. The above annotations are just shortcuts for this. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
Whoops, spoke to soon on that Element / Persist strategy. Didn't stop to think that the Element object was completely class side and only would be as up-to-date as it was at declaration. Any changes in the DOM by Javascript don't translate so that doesn't quite work. Wanted to make sure no one ended up trying the same and failing. I don't have the option of using 5.2 at this point, so that seems to leave out @RequestParameter and @ActivationRequestParameter. What might my other options be for passing back the value attribute from an HTML tag to the Component Event method? I've tried using Javascript to manipulate the EventLink's context, but this is really messy. My input value is a comma-separated list and the context complains on nearly any special character I'd like to separate the values with. I ended up getting working functionality by replacing spaces with 'BlAnK' and separating the list with 'SePaRaToR' instead of ','. These two strings look so weird as to avoid any chance someone might actually match them. Feels like a terrible hack to me though, but deadlines are deadlines and it works. Is there anything more elegant that this? I'd surely want to refactor this code ASAP after my deadline. Would an upgrade to 5.2 and using @RequestParameter be the best refactor I could do, or is there another solution, possibly 5.1 compatible? Thanks, Rich On 12/22/2010 11:07 AM, Thiago H. de Paula Figueiredo wrote: On Wed, 22 Dec 2010 13:57:38 -0200, Rich M wrote: Thanks for the clarifications, Thiago. Helpful as always. You're welcome! At first I didn't see a nice way of actually feeding the values from the HTML form back into the event method for the EventLink though. creatEventLink seems to assume I know my context from the Component class, but the context is only ever known to an HTML element after some Javascript has its way. But then I realized I can save the form input Element I made during rendering with the MarkupWriter (last concept you mentioned) with Persist. Then in the event method read the value attribute back. Another option is to add request parameters instead of using the activation context, something that was made even easier with the new @RequestParameter and @ActivationRequestParameter annotations in Tapestry 5.2. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
Thanks for the clarifications, Thiago. Helpful as always. I didn't realize that event methods automatically bubbled up if void, false, or null were returned from a child component. As far as I can tell, this means I wouldn't need to use triggerEvent. I wrote an with the href loading the URL from ComponentResources.createEventLink(). At first I didn't see a nice way of actually feeding the values from the HTML form back into the event method for the EventLink though. creatEventLink seems to assume I know my context from the Component class, but the context is only ever known to an HTML element after some Javascript has its way. But then I realized I can save the form input Element I made during rendering with the MarkupWriter (last concept you mentioned) with Persist. Then in the event method read the value attribute back. Another corner turned, Tapestry keeps getting better. Thanks again, Rich On 12/21/2010 07:26 PM, Thiago H. de Paula Figueiredo wrote: On Tue, 21 Dec 2010 21:36:54 -0200, Rich M wrote: writing it as a Component works. Not sure what the problem with the Page class was. Most probably your div was generated before the HTML tag. Your scenario really needed to be implemented as a component. Seem to have hit an additional complication. Since this component is generating everything with the MarkupWriter, I'm struggling to understand how I can feed values back to the Component into an Event method. Mailing list searches and documentation searching haven't turned up anything too promosing for me yet. See method triggerEvent(String eventType, Object[] contextValues, ComponentEventCallback callback) in ComponentResources (inherited from ComponentResourcesCommon. Searching the mailing lists and JumpStart will probably give you some hints. I haven't seen a way to write a Tapestry component like Form with the MarkupWriter, so I don't think I can use a Tapestry Form. There's no way of doing it. You need to declare components (at least their t:id) in a template. I'm not clear on how a plain HTML form can trigger a Component method, Just use an URL created from ComponentResources.createEventLink() as the action. is there a Tapestry Javascript method to leverage this? No need of JavaScript for that (but you can use it if you want) Alternately, is there a way to feed MarkupWriter content into a TML template, as in to write out HTML elements inside a element? MarkupWriter.element() inside a component render event method. You can also change what was already written manipulating the Element instances got from MarkupWriter. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
To follow up, writing it as a Component works. Not sure what the problem with the Page class was. Seem to have hit an additional complication. Since this component is generating everything with the MarkupWriter, I'm struggling to understand how I can feed values back to the Component into an Event method. Mailing list searches and documentation searching haven't turned up anything too promosing for me yet. I haven't seen a way to write a Tapestry component like Form with the MarkupWriter, so I don't think I can use a Tapestry Form. I'm not clear on how a plain HTML form can trigger a Component method, is there a Tapestry Javascript method to leverage this? Alternately, is there a way to feed MarkupWriter content into a TML template, as in to write out HTML elements inside a element? Thanks, Rich On 12/21/2010 05:08 PM, Rich M wrote: A quick check, yes the @BeforeRenderTemplate method does get called. A log message displays, but the html elements don't render anywhere according to inspecting of the page source. I have not tried in a component yet for this. I am in the process. I actually think a component will be a better idea anyway, because I will need to re-use a chunk of the logic for this page and it is pretty intense both on the rendering and javascript sides. Essentially the component in this case needs to update some DB entities, and then the page needs to handle redirection/additional logic based on the results of the component form. If I use " @OnEvent(value = EventConstants.SUCCESS) " in the page class, will I be able to capture the firing of a form in the component class? If so that would allow me to trigger logic in the page class, and then to access information from the component (private fields with getter methods) I could use @InjectComponent to have a reference to the component in the Page class? Let me know if my assumptions there are in line with the truth. Thanks, Rich On 12/21/2010 04:56 PM, Josh Canfield wrote: Does your event handler get called? Have you tried the same thing in a page and a component? On Tue, Dec 21, 2010 at 7:59 AM, Rich M wrote: No luck, same result. No or elements in the generated HTML. On 12/20/2010 06:23 PM, Thiago H. de Paula Figueiredo wrote: On Mon, 20 Dec 2010 20:48:39 -0200, Rich M wrote: So that seems to narrow it down to some issue in my approach then, as I am not able to see anything written from my MarkupWriter in the @BeginRender phase. Try @BeforeRenderTemplate - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
A quick check, yes the @BeforeRenderTemplate method does get called. A log message displays, but the html elements don't render anywhere according to inspecting of the page source. I have not tried in a component yet for this. I am in the process. I actually think a component will be a better idea anyway, because I will need to re-use a chunk of the logic for this page and it is pretty intense both on the rendering and javascript sides. Essentially the component in this case needs to update some DB entities, and then the page needs to handle redirection/additional logic based on the results of the component form. If I use " @OnEvent(value = EventConstants.SUCCESS) " in the page class, will I be able to capture the firing of a form in the component class? If so that would allow me to trigger logic in the page class, and then to access information from the component (private fields with getter methods) I could use @InjectComponent to have a reference to the component in the Page class? Let me know if my assumptions there are in line with the truth. Thanks, Rich On 12/21/2010 04:56 PM, Josh Canfield wrote: Does your event handler get called? Have you tried the same thing in a page and a component? On Tue, Dec 21, 2010 at 7:59 AM, Rich M wrote: No luck, same result. No or elements in the generated HTML. On 12/20/2010 06:23 PM, Thiago H. de Paula Figueiredo wrote: On Mon, 20 Dec 2010 20:48:39 -0200, Rich M wrote: So that seems to narrow it down to some issue in my approach then, as I am not able to see anything written from my MarkupWriter in the @BeginRender phase. Try @BeforeRenderTemplate - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: MarkupWriter and TML together?
No luck, same result. No or elements in the generated HTML. On 12/20/2010 06:23 PM, Thiago H. de Paula Figueiredo wrote: On Mon, 20 Dec 2010 20:48:39 -0200, Rich M wrote: So that seems to narrow it down to some issue in my approach then, as I am not able to see anything written from my MarkupWriter in the @BeginRender phase. Try @BeforeRenderTemplate - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org