RE: Custom component validation - two fields

2006-06-04 Thread Mark Stang
Ryan,
Glad you figured out your problem.

regards,

Mark


-Original Message-
From: Ryan Cuprak [mailto:[EMAIL PROTECTED]
Sent: Sat 6/3/2006 10:34 PM
To: Tapestry users
Subject: Re: Custom component validation - two fields
 

  Hello,
  I think figured out my problem - I needed to render the html  
template in rewindFormComponent! It was right in front of me the  
entire time.

  -Ryan

On Jun 3, 2006, at 3:40 PM, Ryan Cuprak wrote:

>
>  I think I follow. So you only display the TextField if the  
> checkbox was checked (via refresh submit)?
>  I plowed ahead with trying to implement my own  
> AbstractFormComponent that would use an html template and also  
> render some of its own content. However, I am getting a stale link  
> exception when I submit. Either I am setting something up  
> incorrectly or missing the boat on the rewind. Not exactly sure how  
> to parse the StaleLink page. Been diving through the list archives  
> and source trying to get a better idea on how component ids are  
> generated and the rewind is done.
>  I can create a new form component re-using other form components -  
> right?
>  To read the template I yanked code out of the BaseComponent class.
>
>  In the end, I want my custom component to display a checkbox and a  
> textfield (possibly a PropertySelection as well). When the form is  
> submitted, if the checkbox is checked but no content is contained  
> in the textfield I want to decorate it and add a message to the  
> top. This component will be used at least a dozen time on the page  
> for different search parameters.
>
>  Gradually learning!
>
>  Thanks,
>  Ryan
>
>
> Exception:
> ---
> You have clicked on a stale link.
>
> Rewind of form test/testForm expected 1 more form elements,  
> starting with id 'selected'.
>
> This is most likely the result of using your browser's back button,  
> but can also be an application error.
>
> Component Java code:
> ---
> public abstract class ComboTest extends AbstractFormComponent  
> implements ITemplateComponent {
>
> private static Logger logger = Logger.getLogger(ComboTest.class);
>
> private static final int OUTER_INIT_SIZE = 5;
> private IRender[] _outer;
> private int _outerCount = 0;
>
> public ComboTest() {
>
> }
>
> public abstract boolean isSelected();
>
> public void readTemplate(IRequestCycle cycle, IPageLoader  
> loader) {
> loader.loadTemplateForComponent(cycle,this);
> }
>
> protected void  renderFormComponent(IMarkupWriter writer,  
> IRequestCycle cycle) {
> logger.debug("being combotest render");
> // this was an attempt to solve it, thought maybe it was  
> missing the id for this component (this didn't work.)
> writer.begin("input");
> writer.attribute("type","hidden");
> writer.attribute("name",getName());
> writer.attribute("id",getName());
> writer.end();
> for(int i =0; i < _outerCount; i++) {
> _outer[i].render(writer,cycle);
> }
>
> logger.debug("end combotest render");
> }
>
> protected void rewindFormComponent(IMarkupWriter writer,  
> IRequestCycle cycle) {
> logger.debug("combotest choosen: choosen: " +  
> cycle.getParameter(getName()));
>
> }
>
> public void finishLoad(IRequestCycle cycle , IPageLoader  
> loader , IComponentSpecification specification) {
> logger.debug("finishing load");
> readTemplate(cycle,loader);
> super.finishLoad(cycle,loader,specification);
> }
>
> public void addOuter(IRender element) {
> logger.debug("outer being rendered");
> if(_outer == null) {
> _outer = new IRender[OUTER_INIT_SIZE];
> _outer[0] = element;
> _outerCount = 1;
> return;
> }
> if (_outerCount == _outer.length) {
> IRender[] newOuter;
> newOuter = new IRender[_outer.length*2];
> System.arraycopy(_outer,0,newOuter,0,_outerCount);
> _outer = newOuter;
> }
> _outer[_outerCount++] = element;
> }
> }
>
> HTML Template:
> ---
> 
> 
> Test
> 
> 
> 
> 
> 
>
> Template:
> ---
>  class="com.kodak.mis.web.components.ComboTest"
>  allow-informal-parameters="yes"
>  allow-body="no">
> 
> 
> 
> 
>
>
> On Friday, June 02, 2006, 

Re: Custom component validation - two fields

2006-06-03 Thread Ryan Cuprak


 Hello,
 I think figured out my problem - I needed to render the html  
template in rewindFormComponent! It was right in front of me the  
entire time.


 -Ryan

On Jun 3, 2006, at 3:40 PM, Ryan Cuprak wrote:



 I think I follow. So you only display the TextField if the  
checkbox was checked (via refresh submit)?
 I plowed ahead with trying to implement my own  
AbstractFormComponent that would use an html template and also  
render some of its own content. However, I am getting a stale link  
exception when I submit. Either I am setting something up  
incorrectly or missing the boat on the rewind. Not exactly sure how  
to parse the StaleLink page. Been diving through the list archives  
and source trying to get a better idea on how component ids are  
generated and the rewind is done.
 I can create a new form component re-using other form components -  
right?

 To read the template I yanked code out of the BaseComponent class.

 In the end, I want my custom component to display a checkbox and a  
textfield (possibly a PropertySelection as well). When the form is  
submitted, if the checkbox is checked but no content is contained  
in the textfield I want to decorate it and add a message to the  
top. This component will be used at least a dozen time on the page  
for different search parameters.


 Gradually learning!

 Thanks,
 Ryan


Exception:
---
You have clicked on a stale link.

Rewind of form test/testForm expected 1 more form elements,  
starting with id 'selected'.


This is most likely the result of using your browser's back button,  
but can also be an application error.


Component Java code:
---
public abstract class ComboTest extends AbstractFormComponent  
implements ITemplateComponent {


private static Logger logger = Logger.getLogger(ComboTest.class);

private static final int OUTER_INIT_SIZE = 5;
private IRender[] _outer;
private int _outerCount = 0;

public ComboTest() {

}

public abstract boolean isSelected();

public void readTemplate(IRequestCycle cycle, IPageLoader  
loader) {

loader.loadTemplateForComponent(cycle,this);
}

protected void  renderFormComponent(IMarkupWriter writer,  
IRequestCycle cycle) {

logger.debug("being combotest render");
// this was an attempt to solve it, thought maybe it was  
missing the id for this component (this didn't work.)

writer.begin("input");
writer.attribute("type","hidden");
writer.attribute("name",getName());
writer.attribute("id",getName());
writer.end();
for(int i =0; i < _outerCount; i++) {
_outer[i].render(writer,cycle);
}

logger.debug("end combotest render");
}

protected void rewindFormComponent(IMarkupWriter writer,  
IRequestCycle cycle) {
logger.debug("combotest choosen: choosen: " +  
cycle.getParameter(getName()));


}

public void finishLoad(IRequestCycle cycle , IPageLoader  
loader , IComponentSpecification specification) {

logger.debug("finishing load");
readTemplate(cycle,loader);
super.finishLoad(cycle,loader,specification);
}

public void addOuter(IRender element) {
logger.debug("outer being rendered");
if(_outer == null) {
_outer = new IRender[OUTER_INIT_SIZE];
_outer[0] = element;
_outerCount = 1;
return;
}
if (_outerCount == _outer.length) {
IRender[] newOuter;
newOuter = new IRender[_outer.length*2];
System.arraycopy(_outer,0,newOuter,0,_outerCount);
_outer = newOuter;
}
_outer[_outerCount++] = element;
}
}

HTML Template:
---


Test






Template:
---
class="com.kodak.mis.web.components.ComboTest"

 allow-informal-parameters="yes"
 allow-body="no">






On Friday, June 02, 2006, at 12:38PM, Mark Stang  
<[EMAIL PROTECTED]> wrote:


What we do is to wrap the checkbox in an AnySubmit.  And then when  
checked a submit happens and the field is then displayed with  
whatever mark-up is required.  If the user attempts to leave the  
screen standard edits tell them they need to provide a value.  If  
they uncheck the box, the field goes away.  Basically, it is done  
via a Conditional or Choose Component.


hth,

Mark


-Original Message-
From: Ryan Cuprak [mailto:[EMAIL PROTECTED]
Sent: Fri 6/2/2006 12:38 PM
To: users@tapestry.apache.org
Subject: Custom component validation - two fields

Hello,
We are trying to implement a rather simple custom form component  
for a search page and perform validation on it. The custom  
component has a checkbox and a text field. If the checkbox is  
checked then a value must be provided in the text field. If not,  
the field must be decorated and a message displayed at the top of  
the form (tie in with the delegate etc). What is the recom

RE: Custom component validation - two fields

2006-06-03 Thread Ryan Cuprak
 
 I think I follow. So you only display the TextField if the checkbox was 
checked (via refresh submit)?
 I plowed ahead with trying to implement my own AbstractFormComponent that 
would use an html template and also render some of its own content. However, I 
am getting a stale link exception when I submit. Either I am setting something 
up incorrectly or missing the boat on the rewind. Not exactly sure how to parse 
the StaleLink page. Been diving through the list archives and source trying to 
get a better idea on how component ids are generated and the rewind is done.
 I can create a new form component re-using other form components - right?
 To read the template I yanked code out of the BaseComponent class. 

 In the end, I want my custom component to display a checkbox and a textfield 
(possibly a PropertySelection as well). When the form is submitted, if the 
checkbox is checked but no content is contained in the textfield I want to 
decorate it and add a message to the top. This component will be used at least 
a dozen time on the page for different search parameters. 
 
 Gradually learning!

 Thanks,
 Ryan


Exception:
---
You have clicked on a stale link.

Rewind of form test/testForm expected 1 more form elements, starting with id 
'selected'.

This is most likely the result of using your browser's back button, but can 
also be an application error.  

Component Java code:
---
public abstract class ComboTest extends AbstractFormComponent implements 
ITemplateComponent {

private static Logger logger = Logger.getLogger(ComboTest.class);

private static final int OUTER_INIT_SIZE = 5;
private IRender[] _outer;
private int _outerCount = 0;

public ComboTest() {

}

public abstract boolean isSelected();

public void readTemplate(IRequestCycle cycle, IPageLoader loader) {
loader.loadTemplateForComponent(cycle,this);
}

protected void  renderFormComponent(IMarkupWriter writer, IRequestCycle 
cycle) {
logger.debug("being combotest render");
// this was an attempt to solve it, thought maybe it was missing the id 
for this component (this didn't work.)
writer.begin("input");
writer.attribute("type","hidden");
writer.attribute("name",getName());
writer.attribute("id",getName());
writer.end();
for(int i =0; i < _outerCount; i++) {
_outer[i].render(writer,cycle);
}

logger.debug("end combotest render");
}

protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle 
cycle) {
logger.debug("combotest choosen: choosen: " + 
cycle.getParameter(getName()));

}

public void finishLoad(IRequestCycle cycle , IPageLoader loader , 
IComponentSpecification specification) {
logger.debug("finishing load");
readTemplate(cycle,loader);
super.finishLoad(cycle,loader,specification);
}

public void addOuter(IRender element) {
logger.debug("outer being rendered");
if(_outer == null) {
_outer = new IRender[OUTER_INIT_SIZE];
_outer[0] = element;
_outerCount = 1;
return;
}
if (_outerCount == _outer.length) {
IRender[] newOuter;
newOuter = new IRender[_outer.length*2];
System.arraycopy(_outer,0,newOuter,0,_outerCount);
_outer = newOuter;
}
_outer[_outerCount++] = element;
}
}

HTML Template:
---


Test






Template:
---





 

On Friday, June 02, 2006, at 12:38PM, Mark Stang <[EMAIL PROTECTED]> wrote:

>What we do is to wrap the checkbox in an AnySubmit.  And then when checked a 
>submit happens and the field is then displayed with whatever mark-up is 
>required.  If the user attempts to leave the screen standard edits tell them 
>they need to provide a value.  If they uncheck the box, the field goes away.  
>Basically, it is done via a Conditional or Choose Component.
>
>hth,
>
>Mark
>
>
>-Original Message-
>From: Ryan Cuprak [mailto:[EMAIL PROTECTED]
>Sent: Fri 6/2/2006 12:38 PM
>To: users@tapestry.apache.org
>Subject: Custom component validation - two fields
> 
>Hello, 
> We are trying to implement a rather simple custom form component for a search 
> page and perform validation on it. The custom component has a checkbox and a 
> text field. If the checkbox is checked then a value must be provided in the 
> text field. If not, the field must be decorated and a message displayed at 
> the top of the form (tie in with the delegate etc). What is the recommended 
> approach for implementing such component validation? Must we extend 
> AbstractFormComponent and implement the renderFormComponent or is there a 
> simpler approach? Is there a hybrid AbstractFormComponent/BaseComponent we 
> have missed somehow? 
>
> Thanks!
> Ryan
>
>-
>To unsubscribe, e-mail: [

RE: Custom component validation - two fields

2006-06-02 Thread Mark Stang
What we do is to wrap the checkbox in an AnySubmit.  And then when checked a 
submit happens and the field is then displayed with whatever mark-up is 
required.  If the user attempts to leave the screen standard edits tell them 
they need to provide a value.  If they uncheck the box, the field goes away.  
Basically, it is done via a Conditional or Choose Component.

hth,

Mark


-Original Message-
From: Ryan Cuprak [mailto:[EMAIL PROTECTED]
Sent: Fri 6/2/2006 12:38 PM
To: users@tapestry.apache.org
Subject: Custom component validation - two fields
 
Hello, 
 We are trying to implement a rather simple custom form component for a search 
page and perform validation on it. The custom component has a checkbox and a 
text field. If the checkbox is checked then a value must be provided in the 
text field. If not, the field must be decorated and a message displayed at the 
top of the form (tie in with the delegate etc). What is the recommended 
approach for implementing such component validation? Must we extend 
AbstractFormComponent and implement the renderFormComponent or is there a 
simpler approach? Is there a hybrid AbstractFormComponent/BaseComponent we have 
missed somehow? 

 Thanks!
 Ryan

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]