Okay,

I created new component "errorMsg" which can be used anywhere on the
page to display individual error. Enhancements welcome.

This component takes two arguments, a literal string denoting field
for which error should be rendered, and form to which field is bound.
The form must be accessible via getter from the class page.

import org.apache.tapestry.Field;
import org.apache.tapestry.MarkupWriter;
import org.apache.tapestry.ValidationTracker;
import org.apache.tapestry.annotations.BeginRender;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.corelib.components.Form;

public class ErrorMsg {
        
        @Parameter
        private String _fieldName;
        
        @Parameter
        private Form _form;
        

        public void setFieldName(String aFieldName) {
                _fieldName = aFieldName;
        }

        @BeginRender
    void renderMessage(MarkupWriter writer)
    {
                Field f = new Field() {
                        public String getElementName() { return _fieldName; }
                        public String getLabel() { return null; }
                        public boolean isDisabled() { return false; }
                        public String getClientId() { return _fieldName; }
                };
                
                ValidationTracker tracker = _form.getDefaultTracker();
                String err = tracker.getError(f);

                writer.write(err);
    }

        public void setForm(Form aForm) {
                _form = aForm;
        }
}

To display individual error messages simply place <t:errorMsg ../>
anywhere on the page. It will render the error if there is one for a
field.

<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>

<strong><t:errorMsg fieldName="literal:foo" form="form"/></strong>
        
<t:form t:id="myform">
User Name:
        <input type="text" t:type="textfield" t:id="bar" t:value="bar"
t:validate="required,minlength=3,maxlength=8"/><br/>
Foo:
        <input type="text" t:type="textfield" t:id="foo" t:value="foo"
t:validate="required"/>
        <p/>
        <input type="submit" t:type="submit" t:id="submitButton" 
value="Submit"/>
        <p/>
        <t:errorMsg fieldName="literal:bar" form="form"/><br/>
        <!-- you can even display same error twice :) -->
        <t:errorMsg fieldName="literal:bar" form="form"/>
</t:form>

</t:layout>


Page Class:

public class Start {

        @Persist
        private String _foo;

        @Persist
        private String _bar;
        
        @Component(id="myform")
        private Form _form;

        public Form getForm() {
                return _form;
        }

        public String getBar() {
                return _bar;
        }

        public String getFoo() {
                return _foo;
        }
}

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

Reply via email to