You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Chris Norris <CN...@widen.com> on 2003/09/11 15:22:29 UTC

Decoupled Date Picker component questoin

I've been trying to use the decoupled datepicker that Harish posted a little
while ago so that I could use something just like the DatePicker, but with a
custom button instead of some little down arrow thingy that designers cringe
at.  After putting it in and testing it, I have only one problem.  I can't
get it to actually try to set a date object... it tries to put out a string,
whereas the DatePicker actually puts out a date.  I don't want to have to
make an extra setThisDate(String date) method in every class that already
has a setThisDate(Date date) method.  How can I get the decoupledDatePicker
to exhibit the same behavior as the DatePicker?
 
-chris

Re: Decoupled Date Picker component questoin

Posted by Harish Krishnaswamy <hk...@comcast.net>.
I am not quite sure I understand. I have been using the component with 
Date objects and I don't have a problem. Could you provide some code 
that I can take a look at? But be advised that it may take a little 
while for me to respond.

-Harish

Chris Norris wrote:

>I've been trying to use the decoupled datepicker that Harish posted a little
>while ago so that I could use something just like the DatePicker, but with a
>custom button instead of some little down arrow thingy that designers cringe
>at.  After putting it in and testing it, I have only one problem.  I can't
>get it to actually try to set a date object... it tries to put out a string,
>whereas the DatePicker actually puts out a date.  I don't want to have to
>make an extra setThisDate(String date) method in every class that already
>has a setThisDate(Date date) method.  How can I get the decoupledDatePicker
>to exhibit the same behavior as the DatePicker?
> 
>-chris
>
>  
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: Decoupled Date Picker component questoin

Posted by Bryan Lewis <br...@maine.rr.com>.
Chris Norris wrote:
> > I've been trying to use the decoupled datepicker that Harish posted a
little
> > while ago so that I could use something just like the DatePicker, but with
a
> > custom button instead of some little down arrow thingy that designers
cringe
> > at.

I tried to do the same. Most date-picker-like things I've seen use an image
button to pop up the calendar.

I couldn't see an easy way to do it.  The original DecoupledDatePicker code
expected the type of the 'field' parameter to be an AbstractTextField.  I tried
generalizing that to an AbstractFormComponent and then to an
AbstractComponent... hoping to use an Any to stand for a <button>... but an
AbstractComponent doesn't have getName().  It looked like it would be doable
but would need more extensive modification so I put it on my growing back
burner.  I'd love to hear that you're able to use an image button.


----- Original Message ----- 
From: "Bryan Lewis" <br...@maine.rr.com>
To: "Tapestry users" <ta...@jakarta.apache.org>
Sent: Thursday, September 11, 2003 10:37 AM
Subject: Re: Decoupled Date Picker component questoin


> The same thing happened to me.
>
> <pickiness warning>
> It would be nice if contributed samples like the DecoupledDatePicker came
with
> a little more documentation, if only the layout of the war file or the
> build.xml.  At my current level of Tapestry experience, it takes me an hour
or
> two to adapt the code to my source-code layout and get it to deploy just
right.
> (Sorry for being ungrateful... wanting to avoid an extra hour or two when I'm
> being saved several hours. :-)   This might mean that I haven't structured my
> source code tree according to the standard practice, if there is a standard
> practice.  I've been able to figure out the samples that come in the Tapestry
> release fairly easily, even when they were out of date, because they're
> end-to-end buildable and executable examples.
> I still haven't gotten the TForms demo of VariablePropertySelection to work,
> but I've put it on the back burner with a note to self, "Learn more about
> scripting with tapestry."
> </pickiness warning>
>
> Anyway, one of the benefits of the DecoupledDatePicker is that you can make
the
> TextField anything you want.  If it's a simple TextField, it gives you a
> String.  If you make it a ValidField, the validator will convert the input to
a
> Date.  Here's how I used it.  This page allows the user to pick a date, then
> redirects the user to a pdf file with a filename derived from the date.  You
> can see in the comments that there are still a couple of points I'm unclear
on,
> but they're minor and the component is working great.
>
> Newswire.page:
> <page-specification class="....">
>
>     <bean name="delegate"
> class="org.apache.tapestry.valid.ValidationDelegate"/>
>
>     <bean name="dateValidator"
class="org.apache.tapestry.valid.DateValidator">
>         <set-property name="required" expression="false"/>
>         <set-property name="maximum" expression="new java.util.Date()"/>
>         <set-property name="format"
> expression="@common.Common@standardDateFormat()"/>
>     </bean>
>
>     <component id="dateField" type="ValidField">
>         <binding name="value" expression="newswireDate"/>
>         <static-binding name="displayName">Newswire Date</static-binding>
>         <binding name="validator" expression="beans.dateValidator"/>
>     </component>
>
>     <component id="form" type="Form">
>         <binding name="listener" expression="listeners.dateSubmit"/>
>         <binding name="delegate" expression="beans.delegate"/>
>     </component>
>
>     <component id="pickButton" type="Button">
>         <static-binding name="label">Pick</static-binding>
>     </component>
>
>     <component id="datePicker" type="DecoupledDatePicker">
>         <binding name="field" expression="dateField"/>
>         <binding name="button" expression="pickButton"/>
>         <binding name="value" expression="newswireDate"/>
>         <static-binding name="format">MM/dd/yyyy</static-binding>
>     </component>
>
> </page-specification>
>
> Newswire.java:
> public class Newswire extends BasePage
> {
>     private Date newswireDate;
>     private String error;
>
>     public String getError() { return error; }
>
>     public Date getNewswireDate() { return newswireDate; }
>     public void setNewswireDate(Date value) { newswireDate = value; }
>
>     private Category log = Category.getInstance(getClass());
>
>     public void dateSubmit(IRequestCycle cycle)
>     {
>         IValidationDelegate delegate = (IValidationDelegate)
>
> getBeans().getBean("delegate");
>         if (delegate.getHasErrors()) {
>             error = "Invalid date entry.";
>             return;
>         }
>
>         // A null entry means today.
>         if (newswireDate == null) {
>             newswireDate = new java.util.Date();
>         }
>
>         // Format the date directly into the URL!
>         SimpleDateFormat df = new SimpleDateFormat
>             ("'http://server.domain.com/wires/'yyyy'/news_'MMdd'.pdf'");
>         String url = df.format(newswireDate);
>         log.debug("dateSubmit url = " + url);
>
>         // Use a RedirectException for an external page.
>         throw new RedirectException(url);
>     }
>
>     // I'm not sure I'm doing this the easiest way.  It seems odd that I
should
>     // have to setName() here.  Does it have to be the same as the button's
id?
>     public Button getPickButton()
>     {
>         String name = "pickButton";
>         Button button = (Button) getNestedComponent(name);
>         button.setName(name);
>         return button;
>     }
>
>     public AbstractTextField getDateField()
>     {
>         return (AbstractTextField) getNestedComponent("dateField");
>     }
>
>     public void detach()
>     {
>         // Not sure I have to do this.
>         error = null;
>         super.detach();
>     }
> }
>
>
> ----- Original Message ----- 
> From: "Chris Norris" <CN...@widen.com>
> To: "'Tapestry users'" <ta...@jakarta.apache.org>
> Sent: Thursday, September 11, 2003 9:22 AM
> Subject: Decoupled Date Picker component questoin
>
>
> > I've been trying to use the decoupled datepicker that Harish posted a
little
> > while ago so that I could use something just like the DatePicker, but with
a
> > custom button instead of some little down arrow thingy that designers
cringe
> > at.  After putting it in and testing it, I have only one problem.  I can't
> > get it to actually try to set a date object... it tries to put out a
string,
> > whereas the DatePicker actually puts out a date.  I don't want to have to
> > make an extra setThisDate(String date) method in every class that already
> > has a setThisDate(Date date) method.  How can I get the decoupledDatePicker
> > to exhibit the same behavior as the DatePicker?
> >
> > -chris
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: Decoupled Date Picker component questoin

Posted by Bryan Lewis <br...@maine.rr.com>.
> you may want to try the following in your page specification...
>         <binding name="button" expression="components.pickButton"/>

Thanks for the tip.  Binding to components.button and components.field makes a
lot more sense than doing it from code.  (doh)

And thanks for the offer to look at my attempt to use the
VariablePropertySelection component.  I'm content to wait until you've packaged
it for the tacos project.

Bryan


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: new components in tacos

Posted by Harish Krishnaswamy <hk...@comcast.net>.
I am little busy with work these days, but I shall try and get something 
out over the weekend.

-Harish


tsvetelin wrote:

>Hi Harish,
>
>I am so glad to see 2 new components in Tacos.
>
>>>From my point of view one of the keys for tapestry success is to have a
>large number of standard/shared components. So when the new people and
>companies start to inspect the framework they will see that most of the
>thing are made and they are available.
>
>I will be very happy(I think this is
>true for all of us) to see additional new components there so if someone of
>you would like to share a component please send a message, proposal or
>component to tacos mailing list. [mailto:tacos-devel@lists.sourceforge.net]
>
>
>Tsvetelin.
>-----Original Message-----
>From: Harish Krishnaswamy [mailto:hkrishnaswamy@comcast.net]
>Sent: Thursday, September 11, 2003 6:38 PM
>To: Tapestry users
>Subject: Re: Decoupled Date Picker component questoin
>
>
>I published the DecoupledDatePicker and the VariablePropertySelection
>components to this list to see if there is enough interest in the
>community to make it Tacos component. Now that there are quite a few
>people that have shown interest, I shall make an effort to move it to
>the public component repository - Tacos, at which point I shall try to
>provide some documentation. To those of you who are not aware, there is
>a public component repository for Tapestry components in SourceForge at
>http://tacos.sf.net.
>
>The demo for the VariablePropertySelection was intended to be a
>deployable webapp. I am not sure what the problem is in your case
>without more details. Please provide more info and I can try and help.
>
>Just a note: I just took a glance at your code snippet and the one thing
>that stuck out was the getPickButton(). I am not sure what you are using
>it for, but setting the the names of components is a no-no in Tapestry
>as far as I know. Names are always handled by the framework. Oh I see
>now, you may want to try the following in your page specification...
>
>    <component id="datePicker" type="DecoupledDatePicker">
>        <binding name="field" expression="dateField"/>
>        <binding name="button" expression="components.pickButton"/>
>        <binding name="value" expression="newswireDate"/>
>        <static-binding name="format">MM/dd/yyyy</static-binding>
>    </component>
>
>and now you can remove the getPickButton() from your class.
>
>Hope this helps.
>
>-Harish
>
>
>Bryan Lewis wrote:
>
>  
>
>>The same thing happened to me.
>>
>><pickiness warning>
>>It would be nice if contributed samples like the DecoupledDatePicker came
>>    
>>
>with
>  
>
>>a little more documentation, if only the layout of the war file or the
>>build.xml.  At my current level of Tapestry experience, it takes me an hour
>>    
>>
>or
>  
>
>>two to adapt the code to my source-code layout and get it to deploy just
>>    
>>
>right.
>  
>
>>(Sorry for being ungrateful... wanting to avoid an extra hour or two when
>>    
>>
>I'm
>  
>
>>being saved several hours. :-)   This might mean that I haven't structured
>>    
>>
>my
>  
>
>>source code tree according to the standard practice, if there is a standard
>>practice.  I've been able to figure out the samples that come in the
>>    
>>
>Tapestry
>  
>
>>release fairly easily, even when they were out of date, because they're
>>end-to-end buildable and executable examples.
>>I still haven't gotten the TForms demo of VariablePropertySelection to
>>    
>>
>work,
>  
>
>>but I've put it on the back burner with a note to self, "Learn more about
>>scripting with tapestry."
>></pickiness warning>
>>
>>Anyway, one of the benefits of the DecoupledDatePicker is that you can make
>>    
>>
>the
>  
>
>>TextField anything you want.  If it's a simple TextField, it gives you a
>>String.  If you make it a ValidField, the validator will convert the input
>>    
>>
>to a
>  
>
>>Date.  Here's how I used it.  This page allows the user to pick a date,
>>    
>>
>then
>  
>
>>redirects the user to a pdf file with a filename derived from the date.
>>    
>>
>You
>  
>
>>can see in the comments that there are still a couple of points I'm unclear
>>    
>>
>on,
>  
>
>>but they're minor and the component is working great.
>>
>>Newswire.page:
>><page-specification class="....">
>>
>>   <bean name="delegate"
>>class="org.apache.tapestry.valid.ValidationDelegate"/>
>>
>>   <bean name="dateValidator"
>>    
>>
>class="org.apache.tapestry.valid.DateValidator">
>  
>
>>       <set-property name="required" expression="false"/>
>>       <set-property name="maximum" expression="new java.util.Date()"/>
>>       <set-property name="format"
>>expression="@common.Common@standardDateFormat()"/>
>>   </bean>
>>
>>   <component id="dateField" type="ValidField">
>>       <binding name="value" expression="newswireDate"/>
>>       <static-binding name="displayName">Newswire Date</static-binding>
>>       <binding name="validator" expression="beans.dateValidator"/>
>>   </component>
>>
>>   <component id="form" type="Form">
>>       <binding name="listener" expression="listeners.dateSubmit"/>
>>       <binding name="delegate" expression="beans.delegate"/>
>>   </component>
>>
>>   <component id="pickButton" type="Button">
>>       <static-binding name="label">Pick</static-binding>
>>   </component>
>>
>>   <component id="datePicker" type="DecoupledDatePicker">
>>       <binding name="field" expression="dateField"/>
>>       <binding name="button" expression="pickButton"/>
>>       <binding name="value" expression="newswireDate"/>
>>       <static-binding name="format">MM/dd/yyyy</static-binding>
>>   </component>
>>
>></page-specification>
>>
>>Newswire.java:
>>public class Newswire extends BasePage
>>{
>>   private Date newswireDate;
>>   private String error;
>>
>>   public String getError() { return error; }
>>
>>   public Date getNewswireDate() { return newswireDate; }
>>   public void setNewswireDate(Date value) { newswireDate = value; }
>>
>>   private Category log = Category.getInstance(getClass());
>>
>>   public void dateSubmit(IRequestCycle cycle)
>>   {
>>       IValidationDelegate delegate = (IValidationDelegate)
>>
>>getBeans().getBean("delegate");
>>       if (delegate.getHasErrors()) {
>>           error = "Invalid date entry.";
>>           return;
>>       }
>>
>>       // A null entry means today.
>>       if (newswireDate == null) {
>>           newswireDate = new java.util.Date();
>>       }
>>
>>       // Format the date directly into the URL!
>>       SimpleDateFormat df = new SimpleDateFormat
>>           ("'http://server.domain.com/wires/'yyyy'/news_'MMdd'.pdf'");
>>       String url = df.format(newswireDate);
>>       log.debug("dateSubmit url = " + url);
>>
>>       // Use a RedirectException for an external page.
>>       throw new RedirectException(url);
>>   }
>>
>>   // I'm not sure I'm doing this the easiest way.  It seems odd that I
>>    
>>
>should
>  
>
>>   // have to setName() here.  Does it have to be the same as the button's
>>    
>>
>id?
>  
>
>>   public Button getPickButton()
>>   {
>>       String name = "pickButton";
>>       Button button = (Button) getNestedComponent(name);
>>       button.setName(name);
>>       return button;
>>   }
>>
>>   public AbstractTextField getDateField()
>>   {
>>       return (AbstractTextField) getNestedComponent("dateField");
>>   }
>>
>>   public void detach()
>>   {
>>       // Not sure I have to do this.
>>       error = null;
>>       super.detach();
>>   }
>>}
>>
>>
>>----- Original Message -----
>>From: "Chris Norris" <CN...@widen.com>
>>To: "'Tapestry users'" <ta...@jakarta.apache.org>
>>Sent: Thursday, September 11, 2003 9:22 AM
>>Subject: Decoupled Date Picker component questoin
>>
>>
>>
>>
>>    
>>
>>>I've been trying to use the decoupled datepicker that Harish posted a
>>>      
>>>
>little
>  
>
>>>while ago so that I could use something just like the DatePicker, but with
>>>      
>>>
>a
>  
>
>>>custom button instead of some little down arrow thingy that designers
>>>      
>>>
>cringe
>  
>
>>>at.  After putting it in and testing it, I have only one problem.  I can't
>>>get it to actually try to set a date object... it tries to put out a
>>>      
>>>
>string,
>  
>
>>>whereas the DatePicker actually puts out a date.  I don't want to have to
>>>make an extra setThisDate(String date) method in every class that already
>>>has a setThisDate(Date date) method.  How can I get the
>>>      
>>>
>decoupledDatePicker
>  
>
>>>to exhibit the same behavior as the DatePicker?
>>>
>>>-chris
>>>
>>>
>>>
>>>      
>>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
>>
>>
>>
>>
>>    
>>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
>
>
>  
>

new components in tacos

Posted by tsvetelin <ts...@rushmore-digital.com>.
Hi Harish,

I am so glad to see 2 new components in Tacos.

>From my point of view one of the keys for tapestry success is to have a
large number of standard/shared components. So when the new people and
companies start to inspect the framework they will see that most of the
thing are made and they are available.

I will be very happy(I think this is
true for all of us) to see additional new components there so if someone of
you would like to share a component please send a message, proposal or
component to tacos mailing list. [mailto:tacos-devel@lists.sourceforge.net]


Tsvetelin.
-----Original Message-----
From: Harish Krishnaswamy [mailto:hkrishnaswamy@comcast.net]
Sent: Thursday, September 11, 2003 6:38 PM
To: Tapestry users
Subject: Re: Decoupled Date Picker component questoin


I published the DecoupledDatePicker and the VariablePropertySelection
components to this list to see if there is enough interest in the
community to make it Tacos component. Now that there are quite a few
people that have shown interest, I shall make an effort to move it to
the public component repository - Tacos, at which point I shall try to
provide some documentation. To those of you who are not aware, there is
a public component repository for Tapestry components in SourceForge at
http://tacos.sf.net.

The demo for the VariablePropertySelection was intended to be a
deployable webapp. I am not sure what the problem is in your case
without more details. Please provide more info and I can try and help.

Just a note: I just took a glance at your code snippet and the one thing
that stuck out was the getPickButton(). I am not sure what you are using
it for, but setting the the names of components is a no-no in Tapestry
as far as I know. Names are always handled by the framework. Oh I see
now, you may want to try the following in your page specification...

    <component id="datePicker" type="DecoupledDatePicker">
        <binding name="field" expression="dateField"/>
        <binding name="button" expression="components.pickButton"/>
        <binding name="value" expression="newswireDate"/>
        <static-binding name="format">MM/dd/yyyy</static-binding>
    </component>

and now you can remove the getPickButton() from your class.

Hope this helps.

-Harish


Bryan Lewis wrote:

>The same thing happened to me.
>
><pickiness warning>
>It would be nice if contributed samples like the DecoupledDatePicker came
with
>a little more documentation, if only the layout of the war file or the
>build.xml.  At my current level of Tapestry experience, it takes me an hour
or
>two to adapt the code to my source-code layout and get it to deploy just
right.
>(Sorry for being ungrateful... wanting to avoid an extra hour or two when
I'm
>being saved several hours. :-)   This might mean that I haven't structured
my
>source code tree according to the standard practice, if there is a standard
>practice.  I've been able to figure out the samples that come in the
Tapestry
>release fairly easily, even when they were out of date, because they're
>end-to-end buildable and executable examples.
>I still haven't gotten the TForms demo of VariablePropertySelection to
work,
>but I've put it on the back burner with a note to self, "Learn more about
>scripting with tapestry."
></pickiness warning>
>
>Anyway, one of the benefits of the DecoupledDatePicker is that you can make
the
>TextField anything you want.  If it's a simple TextField, it gives you a
>String.  If you make it a ValidField, the validator will convert the input
to a
>Date.  Here's how I used it.  This page allows the user to pick a date,
then
>redirects the user to a pdf file with a filename derived from the date.
You
>can see in the comments that there are still a couple of points I'm unclear
on,
>but they're minor and the component is working great.
>
>Newswire.page:
><page-specification class="....">
>
>    <bean name="delegate"
>class="org.apache.tapestry.valid.ValidationDelegate"/>
>
>    <bean name="dateValidator"
class="org.apache.tapestry.valid.DateValidator">
>        <set-property name="required" expression="false"/>
>        <set-property name="maximum" expression="new java.util.Date()"/>
>        <set-property name="format"
>expression="@common.Common@standardDateFormat()"/>
>    </bean>
>
>    <component id="dateField" type="ValidField">
>        <binding name="value" expression="newswireDate"/>
>        <static-binding name="displayName">Newswire Date</static-binding>
>        <binding name="validator" expression="beans.dateValidator"/>
>    </component>
>
>    <component id="form" type="Form">
>        <binding name="listener" expression="listeners.dateSubmit"/>
>        <binding name="delegate" expression="beans.delegate"/>
>    </component>
>
>    <component id="pickButton" type="Button">
>        <static-binding name="label">Pick</static-binding>
>    </component>
>
>    <component id="datePicker" type="DecoupledDatePicker">
>        <binding name="field" expression="dateField"/>
>        <binding name="button" expression="pickButton"/>
>        <binding name="value" expression="newswireDate"/>
>        <static-binding name="format">MM/dd/yyyy</static-binding>
>    </component>
>
></page-specification>
>
>Newswire.java:
>public class Newswire extends BasePage
>{
>    private Date newswireDate;
>    private String error;
>
>    public String getError() { return error; }
>
>    public Date getNewswireDate() { return newswireDate; }
>    public void setNewswireDate(Date value) { newswireDate = value; }
>
>    private Category log = Category.getInstance(getClass());
>
>    public void dateSubmit(IRequestCycle cycle)
>    {
>        IValidationDelegate delegate = (IValidationDelegate)
>
>getBeans().getBean("delegate");
>        if (delegate.getHasErrors()) {
>            error = "Invalid date entry.";
>            return;
>        }
>
>        // A null entry means today.
>        if (newswireDate == null) {
>            newswireDate = new java.util.Date();
>        }
>
>        // Format the date directly into the URL!
>        SimpleDateFormat df = new SimpleDateFormat
>            ("'http://server.domain.com/wires/'yyyy'/news_'MMdd'.pdf'");
>        String url = df.format(newswireDate);
>        log.debug("dateSubmit url = " + url);
>
>        // Use a RedirectException for an external page.
>        throw new RedirectException(url);
>    }
>
>    // I'm not sure I'm doing this the easiest way.  It seems odd that I
should
>    // have to setName() here.  Does it have to be the same as the button's
id?
>    public Button getPickButton()
>    {
>        String name = "pickButton";
>        Button button = (Button) getNestedComponent(name);
>        button.setName(name);
>        return button;
>    }
>
>    public AbstractTextField getDateField()
>    {
>        return (AbstractTextField) getNestedComponent("dateField");
>    }
>
>    public void detach()
>    {
>        // Not sure I have to do this.
>        error = null;
>        super.detach();
>    }
>}
>
>
>----- Original Message -----
>From: "Chris Norris" <CN...@widen.com>
>To: "'Tapestry users'" <ta...@jakarta.apache.org>
>Sent: Thursday, September 11, 2003 9:22 AM
>Subject: Decoupled Date Picker component questoin
>
>
>
>
>>I've been trying to use the decoupled datepicker that Harish posted a
little
>>while ago so that I could use something just like the DatePicker, but with
a
>>custom button instead of some little down arrow thingy that designers
cringe
>>at.  After putting it in and testing it, I have only one problem.  I can't
>>get it to actually try to set a date object... it tries to put out a
string,
>>whereas the DatePicker actually puts out a date.  I don't want to have to
>>make an extra setThisDate(String date) method in every class that already
>>has a setThisDate(Date date) method.  How can I get the
decoupledDatePicker
>>to exhibit the same behavior as the DatePicker?
>>
>>-chris
>>
>>
>>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
>
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: Decoupled Date Picker component questoin

Posted by Harish Krishnaswamy <hk...@comcast.net>.
I published the DecoupledDatePicker and the VariablePropertySelection 
components to this list to see if there is enough interest in the 
community to make it Tacos component. Now that there are quite a few 
people that have shown interest, I shall make an effort to move it to 
the public component repository - Tacos, at which point I shall try to 
provide some documentation. To those of you who are not aware, there is 
a public component repository for Tapestry components in SourceForge at 
http://tacos.sf.net.

The demo for the VariablePropertySelection was intended to be a 
deployable webapp. I am not sure what the problem is in your case 
without more details. Please provide more info and I can try and help.

Just a note: I just took a glance at your code snippet and the one thing 
that stuck out was the getPickButton(). I am not sure what you are using 
it for, but setting the the names of components is a no-no in Tapestry 
as far as I know. Names are always handled by the framework. Oh I see 
now, you may want to try the following in your page specification...

    <component id="datePicker" type="DecoupledDatePicker">
        <binding name="field" expression="dateField"/>
        <binding name="button" expression="components.pickButton"/>
        <binding name="value" expression="newswireDate"/>
        <static-binding name="format">MM/dd/yyyy</static-binding>
    </component>

and now you can remove the getPickButton() from your class.

Hope this helps.

-Harish


Bryan Lewis wrote:

>The same thing happened to me.
>
><pickiness warning>
>It would be nice if contributed samples like the DecoupledDatePicker came with
>a little more documentation, if only the layout of the war file or the
>build.xml.  At my current level of Tapestry experience, it takes me an hour or
>two to adapt the code to my source-code layout and get it to deploy just right.
>(Sorry for being ungrateful... wanting to avoid an extra hour or two when I'm
>being saved several hours. :-)   This might mean that I haven't structured my
>source code tree according to the standard practice, if there is a standard
>practice.  I've been able to figure out the samples that come in the Tapestry
>release fairly easily, even when they were out of date, because they're
>end-to-end buildable and executable examples.
>I still haven't gotten the TForms demo of VariablePropertySelection to work,
>but I've put it on the back burner with a note to self, "Learn more about
>scripting with tapestry."
></pickiness warning>
>
>Anyway, one of the benefits of the DecoupledDatePicker is that you can make the
>TextField anything you want.  If it's a simple TextField, it gives you a
>String.  If you make it a ValidField, the validator will convert the input to a
>Date.  Here's how I used it.  This page allows the user to pick a date, then
>redirects the user to a pdf file with a filename derived from the date.  You
>can see in the comments that there are still a couple of points I'm unclear on,
>but they're minor and the component is working great.
>
>Newswire.page:
><page-specification class="....">
>
>    <bean name="delegate"
>class="org.apache.tapestry.valid.ValidationDelegate"/>
>
>    <bean name="dateValidator" class="org.apache.tapestry.valid.DateValidator">
>        <set-property name="required" expression="false"/>
>        <set-property name="maximum" expression="new java.util.Date()"/>
>        <set-property name="format"
>expression="@common.Common@standardDateFormat()"/>
>    </bean>
>
>    <component id="dateField" type="ValidField">
>        <binding name="value" expression="newswireDate"/>
>        <static-binding name="displayName">Newswire Date</static-binding>
>        <binding name="validator" expression="beans.dateValidator"/>
>    </component>
>
>    <component id="form" type="Form">
>        <binding name="listener" expression="listeners.dateSubmit"/>
>        <binding name="delegate" expression="beans.delegate"/>
>    </component>
>
>    <component id="pickButton" type="Button">
>        <static-binding name="label">Pick</static-binding>
>    </component>
>
>    <component id="datePicker" type="DecoupledDatePicker">
>        <binding name="field" expression="dateField"/>
>        <binding name="button" expression="pickButton"/>
>        <binding name="value" expression="newswireDate"/>
>        <static-binding name="format">MM/dd/yyyy</static-binding>
>    </component>
>
></page-specification>
>
>Newswire.java:
>public class Newswire extends BasePage
>{
>    private Date newswireDate;
>    private String error;
>
>    public String getError() { return error; }
>
>    public Date getNewswireDate() { return newswireDate; }
>    public void setNewswireDate(Date value) { newswireDate = value; }
>
>    private Category log = Category.getInstance(getClass());
>
>    public void dateSubmit(IRequestCycle cycle)
>    {
>        IValidationDelegate delegate = (IValidationDelegate)
>
>getBeans().getBean("delegate");
>        if (delegate.getHasErrors()) {
>            error = "Invalid date entry.";
>            return;
>        }
>
>        // A null entry means today.
>        if (newswireDate == null) {
>            newswireDate = new java.util.Date();
>        }
>
>        // Format the date directly into the URL!
>        SimpleDateFormat df = new SimpleDateFormat
>            ("'http://server.domain.com/wires/'yyyy'/news_'MMdd'.pdf'");
>        String url = df.format(newswireDate);
>        log.debug("dateSubmit url = " + url);
>
>        // Use a RedirectException for an external page.
>        throw new RedirectException(url);
>    }
>
>    // I'm not sure I'm doing this the easiest way.  It seems odd that I should
>    // have to setName() here.  Does it have to be the same as the button's id?
>    public Button getPickButton()
>    {
>        String name = "pickButton";
>        Button button = (Button) getNestedComponent(name);
>        button.setName(name);
>        return button;
>    }
>
>    public AbstractTextField getDateField()
>    {
>        return (AbstractTextField) getNestedComponent("dateField");
>    }
>
>    public void detach()
>    {
>        // Not sure I have to do this.
>        error = null;
>        super.detach();
>    }
>}
>
>
>----- Original Message ----- 
>From: "Chris Norris" <CN...@widen.com>
>To: "'Tapestry users'" <ta...@jakarta.apache.org>
>Sent: Thursday, September 11, 2003 9:22 AM
>Subject: Decoupled Date Picker component questoin
>
>
>  
>
>>I've been trying to use the decoupled datepicker that Harish posted a little
>>while ago so that I could use something just like the DatePicker, but with a
>>custom button instead of some little down arrow thingy that designers cringe
>>at.  After putting it in and testing it, I have only one problem.  I can't
>>get it to actually try to set a date object... it tries to put out a string,
>>whereas the DatePicker actually puts out a date.  I don't want to have to
>>make an extra setThisDate(String date) method in every class that already
>>has a setThisDate(Date date) method.  How can I get the decoupledDatePicker
>>to exhibit the same behavior as the DatePicker?
>>
>>-chris
>>
>>    
>>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
>
>
>  
>

Re: Decoupled Date Picker component questoin

Posted by Bryan Lewis <br...@maine.rr.com>.
The same thing happened to me.

<pickiness warning>
It would be nice if contributed samples like the DecoupledDatePicker came with
a little more documentation, if only the layout of the war file or the
build.xml.  At my current level of Tapestry experience, it takes me an hour or
two to adapt the code to my source-code layout and get it to deploy just right.
(Sorry for being ungrateful... wanting to avoid an extra hour or two when I'm
being saved several hours. :-)   This might mean that I haven't structured my
source code tree according to the standard practice, if there is a standard
practice.  I've been able to figure out the samples that come in the Tapestry
release fairly easily, even when they were out of date, because they're
end-to-end buildable and executable examples.
I still haven't gotten the TForms demo of VariablePropertySelection to work,
but I've put it on the back burner with a note to self, "Learn more about
scripting with tapestry."
</pickiness warning>

Anyway, one of the benefits of the DecoupledDatePicker is that you can make the
TextField anything you want.  If it's a simple TextField, it gives you a
String.  If you make it a ValidField, the validator will convert the input to a
Date.  Here's how I used it.  This page allows the user to pick a date, then
redirects the user to a pdf file with a filename derived from the date.  You
can see in the comments that there are still a couple of points I'm unclear on,
but they're minor and the component is working great.

Newswire.page:
<page-specification class="....">

    <bean name="delegate"
class="org.apache.tapestry.valid.ValidationDelegate"/>

    <bean name="dateValidator" class="org.apache.tapestry.valid.DateValidator">
        <set-property name="required" expression="false"/>
        <set-property name="maximum" expression="new java.util.Date()"/>
        <set-property name="format"
expression="@common.Common@standardDateFormat()"/>
    </bean>

    <component id="dateField" type="ValidField">
        <binding name="value" expression="newswireDate"/>
        <static-binding name="displayName">Newswire Date</static-binding>
        <binding name="validator" expression="beans.dateValidator"/>
    </component>

    <component id="form" type="Form">
        <binding name="listener" expression="listeners.dateSubmit"/>
        <binding name="delegate" expression="beans.delegate"/>
    </component>

    <component id="pickButton" type="Button">
        <static-binding name="label">Pick</static-binding>
    </component>

    <component id="datePicker" type="DecoupledDatePicker">
        <binding name="field" expression="dateField"/>
        <binding name="button" expression="pickButton"/>
        <binding name="value" expression="newswireDate"/>
        <static-binding name="format">MM/dd/yyyy</static-binding>
    </component>

</page-specification>

Newswire.java:
public class Newswire extends BasePage
{
    private Date newswireDate;
    private String error;

    public String getError() { return error; }

    public Date getNewswireDate() { return newswireDate; }
    public void setNewswireDate(Date value) { newswireDate = value; }

    private Category log = Category.getInstance(getClass());

    public void dateSubmit(IRequestCycle cycle)
    {
        IValidationDelegate delegate = (IValidationDelegate)

getBeans().getBean("delegate");
        if (delegate.getHasErrors()) {
            error = "Invalid date entry.";
            return;
        }

        // A null entry means today.
        if (newswireDate == null) {
            newswireDate = new java.util.Date();
        }

        // Format the date directly into the URL!
        SimpleDateFormat df = new SimpleDateFormat
            ("'http://server.domain.com/wires/'yyyy'/news_'MMdd'.pdf'");
        String url = df.format(newswireDate);
        log.debug("dateSubmit url = " + url);

        // Use a RedirectException for an external page.
        throw new RedirectException(url);
    }

    // I'm not sure I'm doing this the easiest way.  It seems odd that I should
    // have to setName() here.  Does it have to be the same as the button's id?
    public Button getPickButton()
    {
        String name = "pickButton";
        Button button = (Button) getNestedComponent(name);
        button.setName(name);
        return button;
    }

    public AbstractTextField getDateField()
    {
        return (AbstractTextField) getNestedComponent("dateField");
    }

    public void detach()
    {
        // Not sure I have to do this.
        error = null;
        super.detach();
    }
}


----- Original Message ----- 
From: "Chris Norris" <CN...@widen.com>
To: "'Tapestry users'" <ta...@jakarta.apache.org>
Sent: Thursday, September 11, 2003 9:22 AM
Subject: Decoupled Date Picker component questoin


> I've been trying to use the decoupled datepicker that Harish posted a little
> while ago so that I could use something just like the DatePicker, but with a
> custom button instead of some little down arrow thingy that designers cringe
> at.  After putting it in and testing it, I have only one problem.  I can't
> get it to actually try to set a date object... it tries to put out a string,
> whereas the DatePicker actually puts out a date.  I don't want to have to
> make an extra setThisDate(String date) method in every class that already
> has a setThisDate(Date date) method.  How can I get the decoupledDatePicker
> to exhibit the same behavior as the DatePicker?
>
> -chris
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org