All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.myfaces.custom.dojoextensions.resource.FacesIO.js Maven / Gradle / Ivy

Go to download

JSF components and utilities that can be used with any JSF implementation. This library is based on the JSF1.1 version of Tomahawk, but with minor source code and build changes to take advantage of JSF1.2 features. A JSF1.2 implementation is required to use this version of the Tomahawk library.

The newest version!
dojo.provide("extensions.FacesIO");

dojo.io.FacesTransport = new function() {
    this.canHandle = function(kwArgs) {
        return this.isClientStateSaving(kwArgs) && dojo.io.XMLHTTPTransport.canHandle(kwArgs);
    }

    this.bind = function(request) {
        if (this.isClientStateSaving(request)) {
            request.method = "post";
            this.addJsfState(request);
        }
        return dojo.io.XMLHTTPTransport.bind(request);
    }

    this.isClientStateSaving = function(kwArgs) {
        //First check if we have a component where we can retrieve it
        //without using its id.
        var affectedAjaxComponent = this.getParamValueFromUrl(kwArgs.url,"affectedAjaxComponent");
        if (affectedAjaxComponent)
        {
            var formElement = dojo.dom.getAncestorsByTag(document.getElementById(affectedAjaxComponent), "form", true);            
            return formElement["javax.faces.ViewState"];
        }    
        return dojo.byId("javax.faces.ViewState");
    }

    this.addJsfState = function(request) {
        request.content = request.content || {};
        
        //This is a hack to make work s:inputSuggestAjax and s:tableSuggestAjax
        // with trinidad. The idea is obtain the request param affectedAjaxComponent
        //encoded in the url, and with this id
        
        //previously the way to do this was:
        //request.content = request.content || {};
        //this.addInputValue(request.content, "javax.faces.ViewState");
        //but trinidad does not render the id on this hidden field, which causes
        //problems on this code.
        
        var affectedAjaxComponent = this.getParamValueFromUrl(request.url,"affectedAjaxComponent");
        
        if (affectedAjaxComponent)
        {
            //Find the affectedAjaxComponent using its id, then its parent form
            //and finally the tag with name javax.faces.ViewState
            //Remember that each form has its own child with            
            var formElement = dojo.dom.getAncestorsByTag(document.getElementById(affectedAjaxComponent), "form", true);

            //request.content["javax.faces.ViewState"] = formElement["javax.faces.ViewState"].value;
            
            //Here we have to handle correctly the encoding of the state value
            var enc = /utf/i.test(request.encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
            if (request.postContent){
                request.postContent = request.postContent + '&javax.faces.ViewState='+ enc(formElement["javax.faces.ViewState"].value);
            }else{
                request.postContent = 'javax.faces.ViewState='+ enc(formElement["javax.faces.ViewState"].value);
            }            
        }
        else
        {
            this.addInputValue(request.content, "javax.faces.ViewState");        
        }
    }
    
    this.getParamValueFromUrl = function(url,param) {
        var startIndexParams = url.indexOf("?"); 
        if ( startIndexParams > -1 ){
            var paramList = url.substr(startIndexParams);
            var aQueryString = paramList.split("&");
            for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
                if (aQueryString[iParam].indexOf(param + "=") > -1 ){
                    var aParam = aQueryString[iParam].split("=");
                    return aParam[1];
                }
            }
         }
         return false;
    } 

    this.addInputValue = function (content, inputName) {
        var control = dojo.byId(inputName);
        if (!control || !control.value)
            return;
        content[inputName] = control.value;
    }

    dojo.io.transports.addTransport("FacesTransport");
    dojo.io.transports.reverse();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy