[ 
https://issues.apache.org/jira/browse/TAP5-52?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Igor Drobiazko closed TAP5-52.
------------------------------

       Resolution: Fixed
    Fix Version/s: 5.2.0

Both solutions are insufficient because you have to coordinate the rendering 
order of the field and its error message. The rendering of this component 
should executed at the end of a heartbeat

> Add Error component that presents validation errors of a single field
> ---------------------------------------------------------------------
>
>                 Key: TAP5-52
>                 URL: https://issues.apache.org/jira/browse/TAP5-52
>             Project: Tapestry 5
>          Issue Type: New Feature
>    Affects Versions: 5.0.15
>            Reporter: Adam Zimowski
>            Assignee: Igor Drobiazko
>            Priority: Minor
>             Fix For: 5.2.0
>
>   Original Estimate: 5h
>  Remaining Estimate: 5h
>
> There shold be an easy way to use "normal text" as replacement for the popup 
> bubbles, as we have the need to build our WebApps conforming to WAI (Web 
> Accessibility Initiative). Tapestry provides <t:errors/> core component to 
> display all form errors at once, but there is currently no easy way to 
> control individual error messages. Following current design, an "intuitive" 
> way for end user would be to look for <t:error/> tag but there is no such tag.
> Here is a draft of a proposed solution. The <t:errorMsg/> tag allows to 
> control individual form error messages and can be placed inside or outside of 
> a form effectively allowing end user to place form error anywhere on a page 
> as plain text. This code should probably be enhanced to also allow control of 
> individual fields: yes/no red X for icon next to a field, yes/no for 
> automatic styling of field on error, etc.
> 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 page class.
> 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;
>        }
>       /* also foo/bar setters here */
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to