Hmmm... I'm not sure why this isn't working for you. FWIW, I can tell you that it *should* work.

Maybe it will help if I relate a trimmed-down verion of a component from one of my projects that uses a form.

ExampleFormComponent.jwc:
<table border="0" cellpadding="3" cellspacing="0">
   <tr valign="middle">
       <td><form jwcid="pageSizeForm" style="margin: 0px;">
           <select jwcid="pageSizeField">
               <option>10</option>
               <option>20</option>
               <option>30</option>
           </select></form>
       </td>
   </tr>
</table>

ExampleFormComponent.jwc:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component-specification PUBLIC
   "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
   "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd";>

<component-specification allow-body="no"
   allow-informal-parameters="yes">

   <component id="pageSizeField" type="PropertySelection">
       <binding name="value" value="pageSize" />
       <binding name="model" value="pageSizeModel" />
   </component>

   <component id="pageSizeForm" type="Form">
       <binding name="listener" value="listener:formSubmit" />
       <binding name="focus" value="false" />
   </component>

</component-specification>


ExampleFormComponent.java:
public abstract class ExampleFormComponent extends BaseComponent {

 /** List of possible page sizes. */
private static final Integer[] PAGE_SIZES= { 10, 20, 30, 40, 50, 100, 200 };

private IPropertySelectionModel pageSizeModel = new PageSizeSelectionModel(
     PAGE_SIZES );


 /**
  * Gets the current page size.
  *
  * @return page size
  */
 @Persist
 public abstract Integer getPageSize();

 /**
  * Sets the current page size.
  *
  * @param pageSize
  *          integer length of page table
  */
 public abstract void setPageSize(Integer pageSize);

 /**
  * Gets the page size selection model.
  *
  * @return page size selection model
  */
 public IPropertySelectionModel getPageSizeModel() {
   return this.pageSizeModel;
 }

 /** Handle the page size form submission. */
 public void formSubmit() {
   // Page size property is set by Tapestry.
 }

}

I cut out most of the guts from the real component (a custom version of contrib:Table), but hopefully there's enough left to demonstrate basic usage of a component with a form. It looks like I don't really need the formSubmit() listener but I've left it in to show you what's working for me. Hope this helps.

-Ryan


Leo Sakhvoruk wrote:

The form is nested simply in the sense that it's inside of a component and not in the main page. It is not however nested inside another form. The reason I believe the rewind isn't happening is because the rewindFormComponent(IMarkupWriter, IRequestCycle) method of components inside the form is never called during a trace and the values that are changed before the form submition are not updated.

Ryan Holmes wrote:

Why do you think the rewind isn't happening and why did you refer to the forms as "nested"? I use components with their own forms and haven't had any problems, so I'm guessing that your page structure is somehow unusual (or at least different from mine). Is their any chance you actually have a form within another form (i.e. a literally nested form in your HTML)?

-Ryan

Leo Sakhvoruk wrote:

Hi everyone,

I have a page with several components each containing a form. Now when the data inside the form is modified, say via TextField, it's never updated because the form inside the component is never rewound. I've tried to get a hold of the form component using the getComponents() method but when I try casting the values I get class cast exceptions since the classes are enhanced. Any clues as to what I can to here?

---------------------------------------------------------------------
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]



---------------------------------------------------------------------
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]

Reply via email to