After spending some time trying to get Tomahawk's
validateEqual working in ADF Faces (works perfectly in JSF, though) I've decided to implement a custom validation method. The second
af:inputText wasn't connected to any ADF binding and this turned out to be the main troublemaker of the day. With the help of the
Dev Guide validation started working quickly, but I've encountered a bunch of annoying little problems...
1. The error message would not display as expected. I expected something like "Repeat password - Passwords are not equal", but all I got was "com.sun.faces.el.ValueBindingImpl@9af3ee - Passwords are not equal". Fortunately, a quick forum search saved me this time (namely
this thread and
this one).
2. Both
af:inputText components did not behave as expected after validation failure. JSF
h:inputSecret has a
redisplay attribute, but I didn't notice anything similar for
af:inputText. When
secret was set to
true, something weird happened - after each validation failure the value of both components was initially set to
******, but it disappeared after pressing a key inside the component. After digging for a while I still don't know why the initial value is set to six stars, but I found the function that removes them:
function _clearPassword(a0,a1)
{
if(window.event!=(void 0))
a1=window.event;
if(a0.value!="******")
return true;
if((a1.keyCode==8)||
((a1.keyCode>=46)&&(a1.keyCode<112)))
a0.value="";
return true;
}
Now that's interesting... Anyway, I tried to get rid of those stars for a long time. The first component that was bound to the password attribute was easier, because binding the component to the backing bean that performs validation and setting the value to
null did the trick.
The second component kept setting its value to
****** despite setting it to
null in the backing bean. After many unsuccessful attempts I removed those stars with a small JavaScript workaround inside the
afh:body tag:
onload="_getElementById(document, 'repeatedUserPassword').value = '';"