You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Matthias Bieber <Ma...@gmx.de> on 2015/07/24 10:55:06 UTC

Forms created in a loop - problem with validation

Hello,
 
I have a loop that creates a few forms and I have implemented the onValidate method to validate the input. If an error occours in the textarea of the first form, the textareas of all other forms are marked as erroneous too, although the forms and textareas have different IDs. Whats wrong?
 
Thanks in advance.
M.B.
 
 
Source code:
 
Index.java:
public class Index
{  
    @Property
    private int[] integers= { 1, 2, 3, 4, 5 };
    
    @Property
    private int anInteger;
    
    public Index()
    {
    }
}
 
Index.tml:
<html t:type="layout" title="HelloWorld Index" t:sidebarTitle="Framework Version" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" xmlns:p="tapestry:parameter">
    <t:Loop t:source="integers" t:value="anInteger">
        <div>${anInteger}</div>
        <t:MyForm id="anInteger" />
    </t:Loop>
</html>
 
MyForm.java:

public class MyForm
{
    @Parameter(required=true)
    @Property
    private int id;
    
    @Property
    private String text;
    
    @InjectComponent
    private Form form;
    
    @InjectComponent
    private TextArea textarea;
    
    @Inject
    Logger logger;
    
    @Inject
    Messages messages;
    
    void onPrepareForSubmitFromForm(int id) {
        this.id = id;
    }
    public void onSuccess() {
        logger.info("onSuccess()");
    }
    
    void onValidateFromForm() {    
        logger.info("id: " + id);
        form.recordError(textarea, "Error");
    }
    
    public String getFormId() {
        return "form_" + id;
    }
    
    public String getTextareaId() {
        return "textarea_" + id;
    }
    
    public String getSubmitId() {
        return "submit_" + id;
    }
}
 
MyForm.tml:
 
<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" xmlns:p="tapestry:parameter">
    <t:form t:id="form" id="prop:formId" t:context="id" >
        <t:textarea t:id="textarea" id="prop:textareaId" value="text" rows="3" cols="50" />
        <t:submit t:id="submit" id="prop:submitId" class="btn btn-large btn-primary" value="Send" />
    </t:form>
</t:container>
 

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


Re: Forms created in a loop - problem with validation

Posted by Lance Java <la...@googlemail.com>.
I think this is caused by the field being reused in the loop. You might
need to recordError with a FieldSnapshot.

Example here
http://t5stitch-lazan.rhcloud.com/mapbindingdemo

Re: Forms created in a loop - problem with validation

Posted by Geoff Callender <ge...@gmail.com>.
These examples might help...

If you’re not using AJAX then it probably makes more sense to put the Form around the Loop:

	T5.4: http://jumpstart.doublenegative.com.au/jumpstart7/examples/tables/editableloop1 <http://jumpstart.doublenegative.com.au/jumpstart7/examples/tables/editableloop1>
		http://jumpstart.doublenegative.com.au/jumpstart7/examples/tables/editableloopforupdate1 <http://jumpstart.doublenegative.com.au/jumpstart7/examples/tables/editableloopforupdate1>
	T5.3: http://jumpstart.doublenegative.com.au/jumpstart/examples/tables/editableloop1 <http://jumpstart.doublenegative.com.au/jumpstart/examples/tables/editableloop1>
		http://jumpstart.doublenegative.com.au/jumpstart/examples/tables/editableloopforupdate1 <http://jumpstart.doublenegative.com.au/jumpstart/examples/tables/editableloopforupdate1>

If you’re using AJAX, then a Form per row works well:

	T5.4: http://jumpstart.doublenegative.com.au/jumpstart7/examples/ajax/formsinaloop <http://jumpstart.doublenegative.com.au/jumpstart7/examples/ajax/formsinaloop>
	T5.3: http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/formsinaloop <http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/formsinaloop>

Geoff

> On 24 Jul 2015, at 6:55 pm, Matthias Bieber <Ma...@gmx.de> wrote:
> 
> 
> Hello,
>  
> I have a loop that creates a few forms and I have implemented the onValidate method to validate the input. If an error occours in the textarea of the first form, the textareas of all other forms are marked as erroneous too, although the forms and textareas have different IDs. Whats wrong?
>  
> Thanks in advance.
> M.B.
>  
>  
> Source code:
>  
> Index.java:
> public class Index
> {  
>     @Property
>     private int[] integers= { 1, 2, 3, 4, 5 };
>     
>     @Property
>     private int anInteger;
>     
>     public Index()
>     {
>     }
> }
>  
> Index.tml:
> <html t:type="layout" title="HelloWorld Index" t:sidebarTitle="Framework Version" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" xmlns:p="tapestry:parameter">
>     <t:Loop t:source="integers" t:value="anInteger">
>         <div>${anInteger}</div>
>         <t:MyForm id="anInteger" />
>     </t:Loop>
> </html>
>  
> MyForm.java:
> 
> public class MyForm
> {
>     @Parameter(required=true)
>     @Property
>     private int id;
>     
>     @Property
>     private String text;
>     
>     @InjectComponent
>     private Form form;
>     
>     @InjectComponent
>     private TextArea textarea;
>     
>     @Inject
>     Logger logger;
>     
>     @Inject
>     Messages messages;
>     
>     void onPrepareForSubmitFromForm(int id) {
>         this.id = id;
>     }
>     public void onSuccess() {
>         logger.info("onSuccess()");
>     }
>     
>     void onValidateFromForm() {    
>         logger.info("id: " + id);
>         form.recordError(textarea, "Error");
>     }
>     
>     public String getFormId() {
>         return "form_" + id;
>     }
>     
>     public String getTextareaId() {
>         return "textarea_" + id;
>     }
>     
>     public String getSubmitId() {
>         return "submit_" + id;
>     }
> }
>  
> MyForm.tml:
>  
> <t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" xmlns:p="tapestry:parameter">
>     <t:form t:id="form" id="prop:formId" t:context="id" >
>         <t:textarea t:id="textarea" id="prop:textareaId" value="text" rows="3" cols="50" />
>         <t:submit t:id="submit" id="prop:submitId" class="btn btn-large btn-primary" value="Send" />
>     </t:form>
> </t:container>
>  
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>