Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Validators can implement the com.opensymphony.xwork.validator.ScriptValidationAware interface to provide The framework adds support for client-side validation :

Code Block

public interface ScriptValidationAware extends FieldValidator {
    public String validationScript(Map parameters);
}

The value returned by validationScript will be executed on the client-side before the form is submitted if client-side validation is enabled. For example, the requiredstring validator has the following code:

Code Block

public String validationScript(Map parameters) {
        String field = (String) parameters.get("name");
        StringBuffer js = new StringBuffer();

        js.append("value = form.elements['" + field + "'].value;\n");
        js.append("if (value == \"\") {\n");
        js.append("\talert('" + getMessage(null) + "');\n");
        js.append("\treturn '" + field + "';\n");
        js.append("}\n");
        js.append("\n");

        return js.toString();
}

To enable client-side validation, use the <ww:form> tag:

on top of the standard validation framework.

Client-side validation can be enabled on a per-form basis by specifying validate="true" in the form tag.

Code Block
html
html
<s:form name="test" action="javascriptValidation" validate="true">
  ...
</s:form>

If a name for the form is not given, the action mapping name will be used as the form name. Otherwise, a correct action and namespace attributes must be provided to the <saf:form> tag.

Code Block
html
html
titleReferencing "submitProfile" in the "/user" namespace
<s:form namespace="/user" action="submitProfile" validate="true">
  ...
</s:form>

Technically, the form's action attribute can refer to a "path" that includes the namespace and action as a URI. But, client-side validation requires that the action name and namespeact to be set separately.

Code Block
html
html
titleWon't work with client-side validation!
<s:form action="/user/submitProfile.action" validate="true">
Code Block
htmlhtml

<ww:form name="'test'" action="'javascriptValidation'" validate="true" >

  ...
</wws:form>

...

All the usual validation configuration steps apply to client-side validation. Client-side validation uses the same validation rules as server-side validation. If server-side validation doesn't work, then client-side validation won't work either.

Info
titleThe left hand doesn't know ...

The required attribute on many Struts Tags is not integrated with client-side validation! The tag attribute is used by certain themes (like xhtml) to put a visual marker (usually '*') next to the field. The tag doesn't know if the validation system actually "requires" the field or not.

Client Side Validation Types

There are two styles of client side validation.