[ 
https://issues.apache.org/jira/browse/TAPESTRY-2119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12589552#action_12589552
 ] 

sinan edited comment on TAPESTRY-2119 at 4/16/08 6:40 AM:
----------------------------------------------------------------

I guess; you can also write it without the explicit reference to Form component:

public class ErrorMsg {
    @Parameter(required = true, defaultPrefix = 
TapestryConstants.LITERAL_BINDING_PREFIX)
    private String _fieldName;

    @Environmental
    private ValidationTracker _tracker;

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

    void beginRender(MarkupWriter writer) {
        if (_tracker == null) throw new 
RuntimeException(InternalMessages.encloseErrorsInForm());
        Field f = new Field() {
                           public String getLabel() {  return null;  }
                           public boolean isDisabled() {  return false;  }
                           public String getClientId() {  return _fieldName;  }
                           public String getControlName() {  return _fieldName; 
 }
                           public boolean isRequired() {  return false;  }
                 };
         String err = _tracker.getError(f);
         writer.write(err);
    }
}

then you can use it like:

<t:errorMsg fieldName="username" />


      was (Author: sinan):
    I guess; you can also write it without the explicit reference to Form 
component:

public class ErrorMsg {
    @Parameter(required = true, defaultPrefix = 
TapestryConstants.LITERAL_BINDING_PREFIX)
    private String _fieldName;

    @Environmental(false)
    private ValidationTracker _tracker;

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

    void beginRender(MarkupWriter writer) {
        if (_tracker == null) throw new 
RuntimeException(InternalMessages.encloseErrorsInForm());
        Field f = new Field() {
                           public String getLabel() {  return null;  }
                           public boolean isDisabled() {  return false;  }
                           public String getClientId() {  return _fieldName;  }
                           public String getControlName() {  return _fieldName; 
 }
                           public boolean isRequired() {  return false;  }
                 };
         String err = _tracker.getError(f);
         writer.write(err);
    }
}

then you can use it like:

<t:errorMsg fieldName="username" />

  
> A new <t:error ../> tag should compliment existing <t:errors/> so that 
> individual form error messages can be customized.
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: TAPESTRY-2119
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2119
>             Project: Tapestry
>          Issue Type: New Feature
>          Components: Core Components
>    Affects Versions: 5.0.9
>            Reporter: Adam Zimowski
>            Priority: Minor
>             Fix For: 5.1
>
>   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.


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

Reply via email to