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
Fix For: 5.0.10
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;
}
/* also foo/bar setters here */
}
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;
}
}
--
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]