Could you please open separate tickets for each item, along with any
patches you'd like to propose, in the Shale JIRA [1] (Validator
component) ?
Unless someone looks at this immediately, that will better ensure that
these stay on some roadmap.
-Rahul
[1]
https://issues.apache.org/struts/browse/SHALEOn 4/16/08, Jeff Tsay <
jctsay@...> wrote:
> Hi,
>
> I've been trying to integrate the Shale validator stuff with xulfaces. I've
> come across the following problems, some of which I have fixes for. Your
> input would be appreciated, hope I can check some of the stuff in.
>
> 1) As I mentioned in the shale user mailing list, when the validator script
> gets rendered, it outputs raw Javascript inside the <script> tags. The
> Javascript includes characters like & which need to be escaped or in a CDATA
> section in XML. For XUL or XHTML, this is a problem. I guess that XHTML
> parsers are more lenient about this so that's why the problem never showed
> up? Anyway the fix, which was also suggested by Gary VanMatre, was to
> enclose the script contents in an XML CDATA section. So in
> src/main/java/org/apache/shale/validator/faces/ValidatorScript.java
> I have:
>
> private void writeScriptStart(ResponseWriter writer) throws IOException {
> writer.startElement("script", this);
> writer.writeAttribute("type", "text/javascript", null);
> writer.writeAttribute("language", "Javascript1.1",
> null);
> writer.write("\n");
> // jtsay added
> // Enclose XML in CDATA so special characters can be used without
> escaping.
> if (!"text/html".equals(writer.getContentType())) {
> writer.write("<![CDATA[\n");
> }
> }
>
> and
>
> private void writeScriptEnd(ResponseWriter writer) throws IOException {
> // jtsay added
> if (!"text/html".equals(writer.getContentType())) {
> writer.write("\n]]>\n");
> }
> writer.write("\n");
> writer.endElement("script");
> }
>
> This assumes if we are not rendering text/html, we must be rendering some
> sort of XML. Sound reasonable?
>
>
> 2) It seems strange the way that configuration rules are loaded. If the
> default configuration file is not found, the validator lifecycle listener
> will add the default configuration file to the end of a url list. However,
> since the list is processed in forward order, that means if you leave out
> the default configuration file, any settings you have in your own file will
> be overwritten by the default. That means you need to explicitly put the
> default configuration file in your
> org.apache.shale.validator.VALIDATOR_RULES list before your
> own files. Since I think it makes more sense to have your specified
> configuration files override the default settings, I propose the following
> change in ValidatorLifeCycleListener:
>
>
> private ValidatorResources
> validatorResources(ServletContext context)
> throws IOException, SAXException {
>
> // Process the explicitly configured resources (if any)
> // jtsay
> // Since we want to add to the beginning later, use a linked list
> // ArrayList urls = new ArrayList()
> LinkedList urls = new LinkedList();
>
>
> ...
>
>
> // Process the default configuration resources (if not already loaded)
> if (!didDefault) {
> try {
> url =
> context.getResource(Globals.DEFAULT_VALIDATOR_RULES);
> } catch (MalformedURLException e) {
> throw new
> IllegalArgumentException("MalformedURLException:"
> + " The URL '" + Globals.DEFAULT_VALIDATOR_RULES
> + "' specified as a validator rules resource is
> malformed.");
> }
> if (url == null) {
> url =
> ValidatorLifecycleListener.class.getResource(Globals.DEFAULT_VALIDATOR_RULES);
> }
> if (url == null) {
> throw new
> IllegalArgumentException(Globals.DEFAULT_VALIDATOR_RULES);
> }
> // jtsay
> // Add to beginning of list so that explicit resources override
> // default, not the other way around.
> urls.addFirst(url);
> }
>
> 3) Finally, I'd like to see the ability to override the validation error
> handler. Currently, with the default validatorUtilities.js, whenever a
> validation error occurs, an alert is displayed. To me that is a bit
> unpolished; I'd rather see some message below the input field that has an
> error. Although it's easy enough to replace validatorUtilities.js,
> jcv_handleError() simply doesn't get enough information in its arguments to
> do much with the DOM tree, unless the ID's of the elements to replace are
> hardcoded. It would be good also to let the user supply his own error
> handling script in the JSF tags, instead of messing with replacing
> validatorUtilities (which would be apply across the entire web app anyway).
> Any ideas on how to do this? Is anyone else interested in getting rid of
> alert()?
>
> Thanks,
>
> Jeff
>
>