menuItem onsubmit doesn't fire
ronanker Apr 10, 2008 1:03 PMWith the folowing code :
<h:form id="formEntete" onsubmit="return validerForm(this);">
<rich:toolBar styleClass="table_menu">
<rich:dropDownMenu value="menu1">
<rich:menuItem submitMode="server"
value="test1"
action="go_test1"/>
<rich:menuItem submitMode="server"
value="test2"
action="#{handler.action}"/>
</rich:dropDownMenu>
</rich:toolBar>
</h:form>the onsubmit is never executed. when I search in generated html code, I see :
onclick="this.className='dr-menu-item dr-menu-item-enabled rich-menu-item rich-menu-item-enabled ';
{var form = A4J.findForm(this);var params = new Object();
params['formEntete:j_id_jsp_171382336_2pc4:hidden'] = 'formEntete:j_id_jsp_171382336_2pc4';
Richfaces.jsFormSubmit('formEntete:j_id_jsp_171382336_2pc4',form.id,'',params);
};
return false;;"and in richfaces forms.js.jsf :Richfaces.jsFormSubmit = function(linkId, formName, target, params) {
var form = document.getElementById(formName);
if (form) {
var formTarget = form.target;
var paramNames = new Array();
if (params) {
for (var n in params) {
paramNames.push(n);
}
}
_JSFFormSubmit(linkId,formName,target,params);
_clearJSFFormParameters(formName, formTarget, paramNames);
}
}and then in a4j forms.js.jsf :function _JSFFormSubmit(linkId,formName,target,parameters){
var form = document.getElementById(formName);
if(form){
/*var hiddenField = form.elements[formName+":_idcl"];
if(hiddenField){
hiddenField.value=linkId;
} else {
var input = document.createElement("input");
input.type="hidden";
input.name=formName+":_idcl";
input.value=linkId;
form.appendChild(input);
}*/
var paramNames = [];
if(target){
form.target=target;
}
if(parameters){
for(var param in parameters){
paramNames.push(param);
if(form.elements[param]){
form.elements[param].value = parameters[param];
} else {
var input = document.createElement("input");
input.type="hidden";
input.name=param;
input.value=parameters[param];
form.appendChild(input);
}
}
}
form.submit();
_clearJSFFormParameters(formName,target,paramNames);
} else {
alert("Form "+formName+" not found in document");
}
return false;
};So : no test is made on form.onsubmit()... we should have somewhere something like :
function submitForm(f) {
if (typeof f.onsubmit == "function") {
var result = f.onsubmit();
if (typeof result == "undefined" || result) {
f.submit();
}
}else{
f.submit();
}
return false;
}or like it's done in a4j-ajax :1679 A4J.AJAX.SubmitRequest = function( containerId, formId ,domEvt , options ) {
1678 // First - run onsubmit event for client-side validation.
1679 LOG.debug("NEW AJAX REQUEST !!! with form :"+formId );
1680// var form = A4J.AJAX.locateForm(event);
1681 var form = window.document.getElementById(formId);
1682 if( (!form || form.nodeName.toUpperCase() != "FORM") && domEvt ) {
1683 var srcElement = domEvt.target||domEvt.srcElement||null;
1684 if(srcElement){
1685 form = A4J.AJAX.locateForm(srcElement);
1686 };
1687 };
1688 // TODO - test for null of form object
1689 if(!options.submitByForm && form && form.onsubmit) {
1690 LOG.debug("Form have onsubmit function, call it" );
1691 if( form.onsubmit() == false ){
1692 return false;
1693 };
1694 };
...can you explain it or correct it for next release... Or if it's normal, can you explain me how can i do what i want to do...