329 Lotus blogs updated hourly. Who will post next? Home | Downloads | Events | Jobs | Twitter | Bookmarks | Pods | Blogs | Search | myPL | About 
 
Latest 7 Posts
Beware <script> in XPages
Wed, May 15th 2013 324
Working the system to get bugs fixed
Mon, May 13th 2013 150
Delete empty folders, take 2
Wed, Apr 10th 2013 231
@IsNotesBrowserPlugin
Wed, Mar 20th 2013 299
Are Apple customers allowed to marry non-Apple users?
Mon, Jan 21st 2013 513
Searching for design elements 100 times faster
Tue, Jan 8th 2013 528
Speak at Pulse?
Wed, Oct 17th 2012 336
Top 10
Searching for design elements 100 times faster
Tue, Jan 8th 2013 528
Are Apple customers allowed to marry non-Apple users?
Mon, Jan 21st 2013 513
Better SSJS validation for XPages
Wed, Jan 5th 2011 373
Speak at Pulse?
Wed, Oct 17th 2012 336
Sample code for LCLSX file attachments article
Wed, Sep 5th 2012 334
Beware <script> in XPages
Wed, May 15th 2013 324
New Best Practices Wiki
Tue, Jan 10th 2012 311
@IsNotesBrowserPlugin
Wed, Mar 20th 2013 299
Why inboxes fail
Wed, Jun 13th 2012 293
Another way to make an efficient date/based view
Mon, May 23rd 2011 273


Better SSJS validation for XPages
Andre Guirard    

I've been doing some XPages development recently, and I was frustrated by some inconvenience in doing server-side validation using JavaScript.

The typical way of doing a series of validations on the same field, is to have a message and condition for each test, e.g.:

<xp:inputText id="inputText1">
     
<xp:this.validators>
             
<xp:validateRequired
                     
message="This here is a required field.">
             
</xp:validateRequired>
             
<xp:validateExpression
                     
message="The item must be at least 3 characters">
                     
<xp:this.expression><![CDATA[#{javascript:(value.trim().length >= 3)}]]></xp:this.expression>
             
</xp:validateExpression>
             
<xp:validateExpression
                     
message="RTC must be followed by four digits.">
                     
<xp:this.expression>
                     
var valu:string = value.trim();
                      var exp = new RegExp("^rtc[0-9]{4}$", "i");

                      return (!valu.startsWithIgnoreCase("rtc")

                              || valu.match(exp)

                       );
}]]></xp:this.expression>
             
</xp:validateExpression>
     
</xp:this.validators>
...

If the validation might result in multiple mesages, you have to split it up according to which message you want to display, and often end up repeating some work with each condition (such as trimming the string in this case, or testing some other fields to see whether there are some restrictions on this one). You can't put all the validation code into one tidy little subroutine in a server JavaScript library.

Of course, you could have one piece of code that returns true or false and also assigns a viewScope variable that would be read by a computed message element, but that's a little kludgy.
I found the
customValidator element, and the linked article is nice if you want to do validations in Java. But I preferred to add the code to an existing JavaScript library. Fortunately for me, I have access to the people who designed this stuff, so I asked them how to do it and they told me about a couple of system functions I never found in my searching! So, you can start with the following code which includes those calls:

function postValidationError(control, msg) {
     
// msg is the error message string; control is the component being validated
     
// ('this' from the caller).
     
if ((typeof msg) != "string")
             
return;
     
var msgObj = new javax.faces.application.FacesMessage(
              javax.faces.application.FacesMessage.SEVERITY_ERROR, msg, msg

      );

     
facesContext.addMessage(control.getClientId(facesContext), msgObj);
      control.setValid(
false);
}

Put that in your JavaScript library, then write multiple tests in a single piece of JavaScript code, such as:

...<xp:this.validators><xp:customValidator>
     
<xp:this.validate><![CDATA[#{javascript:
var val = value.trim();

if (val.length < 3)

      postValidationError(this,
"The item must be at least 3 characters");
else if (valu.startsWithIgnoreCase("rtc")) {

      var exp = new RegExp("^rtc[0-9]{4}$", "i");

      if (!val.match(exp)) {

              postValidationError(this,
"RTC must be followed by four digits.");
      }

}

}]]>
</xp:this.validate></xp:customValidator>...

To make things a little simpler, the postValidationError checks the datatype of the msg argument, so you can write a validation function that returns null when valid (or true or any non-string), or the message if not valid. Then you can call postValidationError unconditionally with this return value, and it'll do something appropriate. Note that for a custom validator, the return value is ignored; if you don't do anything to flag the control as invalid, it's assumed to be valid.


---------------------
http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/better-ssjs-validation-for-xpages
Jan 04, 2011
374 hits



Recent Blog Posts
324


Beware <script> in XPages
Wed, May 15th 2013 12:30p   Andre Guirard
I may be stating the obvious, but I wasn't the only one on my team caught out by this, so I thought I'd best mention it. I recently discovered the hard way that there's a problem with using elements in XPages. Always use instead. Why, you ask? Either seems to work fine! The problem comes up if your application is translated. The code that decides what parts of your page are translatable doesn't know anything about the element, so your JavaScript code is marked as a localizable string. It [read] Keywords: ldd lotus xpages application best practice javascript
150


Working the system to get bugs fixed
Mon, May 13th 2013 9:20a   Andre Guirard
An issue recently came to my attention that (based on my informal poll) has been a thorn in the side for Domino administrators for quite a while. I've been trying to figure out how it is that it's never been fixed. I'm referring to the fact that end users, when they create or rename a folder, are allowed to use various characters that have special meanings in design element names -- backslash, vertical bar, underscore, forward slash (which causes problems in mobile) and enclosing the name in [read] Keywords: domino ibm ldd lotus notes notes client notesdomino bug development ideajam mobile
231


Delete empty folders, take 2
Wed, Apr 10th 2013 9:50a   Andre Guirard
I while back I wrote a post containing code to clean up empty folders from user mail files. Yesterday, someone pointed out to me that it doesn't take into account the fact that folders that contain subfolders can be technically empty, in the sense of containing no documents, but we don't want to delete them if they have subfolders which are non-empty -- or if they have subfolders we don't also want to delete. So I came up with a new version of the code that deals with those situations. As bac [read] Keywords: ldd lotus lotusscript application
299


@IsNotesBrowserPlugin
Wed, Mar 20th 2013 7:40a   Andre Guirard
In case it makes a difference for your application, here's how to tell whether you're running in the Notes browser plugin. So far, the only difference that's mattered to me is that the [FileExit] command doesn't work in NBP, causing an error dialog if you try it. %REM Function IsNotesBrowserPlugin Description: Return TRUE if we're running in the Notes browser plugin. %END REM Function IsNotesBrowserPlugin As Boolean Dim session As New NotesSession [read] Keywords: ldd lotus notes application
513


Are Apple customers allowed to marry non-Apple users?
Mon, Jan 21st 2013 2:00p   Andre Guirard
It's been an ordeal. I have an Android smartphone and use Gmail's calendar. My wife has an iPhone. You'd think it would be simple to have a shared calendar -- this is, after all, the future. As it turns out, it is possible, but the arduous process has made me wonder whether Apple considers it a form of apostasy for their customers to associate with someone who doesn't use their products. We had two alternatives to start with: we could create our shared calendar in Gmail or iCloud. No prefere [read] Keywords: ibm ldd lotus notes apple email google interface iphone java
528


Searching for design elements 100 times faster
Tue, Jan 8th 2013 9:40a   Andre Guirard
Often, entries in this blog are in reaction to questions I get, or someone else's code I've run across. One of the reasons things have been so quiet here is that my job has changed so that's not happening as often. But every now and them I'm reminded that there are things I know that it hadn't occurred to me weren't obvious, until I run across another developer who didn't know it. That's the case with this tip. Someone mentioned that it was taking their code a long time to scan mail file [read] Keywords: ldd lotus lotusscript database java network server




336


Speak at Pulse?
Wed, Oct 17th 2012 12:20p   Andre Guirard
If you're thinking of submitting an abstract to the Pulse 2013 conference in Las Vegas, you might like to register for this webcast that explains the process. If you've been doing something interesting with IBM technologies, here's your chance to shine! [read] Keywords: ibm ldd lotus tivoli
334


Sample code for LCLSX file attachments article
Wed, Sep 5th 2012 1:50p   Andre Guirard
I keep getting asked where to get the sample code for the article "Working with file attachments in the LCLSX", which used to be in the Lotus Sandbox before that went away. The code is here: LcLsxTracy.nsf [read] Keywords: ibm ldd lotus lotusscript
293


Why inboxes fail
Wed, Jun 13th 2012 6:53p   Andre Guirard
I've been doing some research recently into what causes email to fail to be delivered into inboxes, although it is visible in the All Documents view. I was concerned with this mainly because the recommended corrective action (copy compact) isn't an option for SmartCloud Notes users and their local admins, who don't have access to the users' mail servers to issue console commands. Conventional wisdom, and our technotes, claim that the problem is that the "inbox index gets corrupted". But it [read] Keywords: admin ldd lotus notes notes client bug database email
180


You can read a story of mine...
Thu, May 10th 2012 6:10a   Andre Guirard
In the recent anthology Sky-Tinted Waters from SamsDot, my story "Misprint" appears. It's about a young stage magician and a trick that works a little too well, and the dangers of not reading ahead to the end of the instructions. The other stories are also very good and I'm enjoying reading it. I hope a bunch of you will buy copies, and that you'll find the stories entertaining. No ebook version is planned at present. [read] Keywords: ldd lotus




Created and Maintained by Yancy Lent - About - Blog Submission - Suggestions - Change Log - Blog Widget - Advertising - Mobile Edition