You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/11/27 19:21:12 UTC
svn commit: r349272 - in /struts/flow/trunk: ./ src/examples/WEB-INF/remote/
src/examples/remote/ src/java/org/apache/struts/flow/
src/java/org/apache/struts/flow/core/javascript/fom/
src/java/org/apache/struts/flow/ibatis/ src/java/org/apache/struts/f...
Author: mrdon
Date: Sun Nov 27 10:21:07 2005
New Revision: 349272
URL: http://svn.apache.org/viewcvs?rev=349272&view=rev
Log:
Moved to dojo for client js library, fixed a few places that weren't
wrapping java objects correctly, improved logging, upgraded to Rhin
1.6R2
Added:
struts/flow/trunk/src/examples/remote/dojo-io.js (with props)
struts/flow/trunk/src/examples/remote/json.js (with props)
Removed:
struts/flow/trunk/src/examples/remote/clientFlow.js
Modified:
struts/flow/trunk/build.xml
struts/flow/trunk/project.xml
struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp
struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java
struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java
struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java
struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java
struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java
struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java
Modified: struts/flow/trunk/build.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/build.xml?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/build.xml (original)
+++ struts/flow/trunk/build.xml Sun Nov 27 10:21:07 2005
@@ -100,9 +100,9 @@
ignoreerrors="true"
src="http://www.ibiblio.org/maven/struts/jars/struts-1.2.8.jar"/>
- <get dest="${lib.core}/js-1.6R1.jar" usetimestamp="true"
+ <get dest="${lib.core}/js-1.6R2.jar" usetimestamp="true"
ignoreerrors="true"
- src="http://www.ibiblio.org/maven/rhino/jars/js-1.6R1.jar"/>
+ src="http://www.ibiblio.org/maven/rhino/jars/js-1.6R2.jar"/>
<get dest="${lib.core}/commons-chain-1.0.jar" usetimestamp="true"
ignoreerrors="true"
Modified: struts/flow/trunk/project.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/project.xml?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/project.xml (original)
+++ struts/flow/trunk/project.xml Sun Nov 27 10:21:07 2005
@@ -77,7 +77,7 @@
<dependency>
<groupId>rhino</groupId>
<artifactId>js</artifactId>
- <version>1.6R1</version>
+ <version>1.6R2</version>
<properties>
<war.bundle>true</war.bundle>
</properties>
Modified: struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp (original)
+++ struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp Sun Nov 27 10:21:07 2005
@@ -4,18 +4,21 @@
<title>Struts Flow number guessing game - Remote edition</title>
<script type="text/javascript">
<!--
-function init() {
- this.client = new ClientFlow("guess.do");
-}
function cheat() {
- result = client.call("cheat");
- alert("The secret number is "+result.secret+". After applying a penalty, you have guessed "+result.guesses+" times");
+ dojo.io.bind({
+ url: "guess.do?FlowCall=cheat",
+ type: "text/javascript",
+ load: function(type, data, evt) {
+ eval("data = "+data);
+ alert("The secret number is "+data.secret+". After applying a penalty, you have guessed "+data.guesses+" times");
+ }
+ });
}
-->
</script>
- <script type="text/javascript" src="clientFlow.js" />
+ <script type="text/javascript" src="dojo-io.js"></script>
</head>
-<body onload="init()">
+<body>
<h1>Guess the Number Between 1 and 10</h1>
Added: struts/flow/trunk/src/examples/remote/dojo-io.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/remote/dojo-io.js?rev=349272&view=auto
==============================================================================
--- struts/flow/trunk/src/examples/remote/dojo-io.js (added)
+++ struts/flow/trunk/src/examples/remote/dojo-io.js Sun Nov 27 10:21:07 2005
@@ -0,0 +1,1271 @@
+/* Copyright (c) 2004-2005 The Dojo Foundation, Licensed under the Academic Free License version 2.1 or above */var dj_global=this;
+function dj_undef(_1,_2){
+if(!_2){
+_2=dj_global;
+}
+return (typeof _2[_1]=="undefined");
+}
+function dj_eval_object_path(_3,_4){
+if(typeof _3!="string"){
+return dj_global;
+}
+if(_3.indexOf(".")==-1){
+return dj_undef(_3)?undefined:dj_global[_3];
+}
+var _5=_3.split(/\./);
+var _6=dj_global;
+for(var i=0;i<_5.length;++i){
+if(!_4){
+_6=_6[_5[i]];
+if((typeof _6=="undefined")||(!_6)){
+return _6;
+}
+}else{
+if(dj_undef(_5[i],_6)){
+_6[_5[i]]={};
+}
+_6=_6[_5[i]];
+}
+}
+return _6;
+}
+if(dj_undef("djConfig")){
+var djConfig={};
+}
+var dojo;
+if(dj_undef("dojo")){
+dojo={};
+}
+dojo.version={major:0,minor:1,patch:0,revision:Number("$Rev: 1321 $".match(/[0-9]+/)[0]),toString:function(){
+var v=dojo.version;
+return v.major+"."+v.minor+"."+v.patch+" ("+v.revision+")";
+}};
+function dj_error_to_string(_9){
+return ((!dj_undef("message",_9))?_9.message:(dj_undef("description",_9)?_9:_9.description));
+}
+function dj_debug(){
+var _10=arguments;
+if(dj_undef("println",dojo.hostenv)){
+dj_throw("dj_debug not available (yet?)");
+}
+if(!dojo.hostenv.is_debug_){
+return;
+}
+var _11=dj_global["jum"];
+var s=_11?"":"DEBUG: ";
+for(var i=0;i<_10.length;++i){
+if(!false&&_10[i] instanceof Error){
+var msg="["+_10[i].name+": "+dj_error_to_string(_10[i])+(_10[i].fileName?", file: "+_10[i].fileName:"")+(_10[i].lineNumber?", line: "+_10[i].lineNumber:"")+"]";
+}else{
+var msg=_10[i];
+}
+s+=msg+" ";
+}
+if(_11){
+jum.debug(s);
+}else{
+dojo.hostenv.println(s);
+}
+}
+function dj_throw(_14){
+var he=dojo.hostenv;
+if(dj_undef("hostenv",dojo)&&dj_undef("println",dojo)){
+dojo.hostenv.println("FATAL: "+_14);
+}
+throw Error(_14);
+}
+function dj_rethrow(_16,_17){
+var _18=dj_error_to_string(_17);
+dj_throw(_16+": "+_18);
+}
+function dj_eval(s){
+return dj_global.eval?dj_global.eval(s):eval(s);
+}
+function dj_unimplemented(_19,_20){
+var _21="'"+_19+"' not implemented";
+if((typeof _20!="undefined")&&(_20)){
+_21+=" "+_20;
+}
+dj_throw(_21);
+}
+function dj_deprecated(_22,_23){
+var _24="DEPRECATED: "+_22;
+if((typeof _23!="undefined")&&(_23)){
+_24+=" "+_23;
+}
+dj_debug(_24);
+}
+function dj_inherits(_25,_26){
+if(typeof _26!="function"){
+dj_throw("superclass: "+_26+" borken");
+}
+_25.prototype=new _26();
+_25.prototype.constructor=_25;
+_25.superclass=_26.prototype;
+_25["super"]=_26.prototype;
+}
+dojo.render={name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:{capable:false,support:{builtin:false,plugin:false},ie:false,opera:false,khtml:false,safari:false,moz:false,prefixes:["html"]},svg:{capable:false,support:{builtin:false,plugin:false},corel:false,adobe:false,batik:false,prefixes:["svg"]},swf:{capable:false,support:{builtin:false,plugin:false},mm:false,prefixes:["Swf","Flash","Mm"]},swt:{capable:false,support:{builtin:false,plugin:false},ibm:false,prefixes:["Swt"]}};
+dojo.hostenv=(function(){
+var djc=djConfig;
+function _def(obj,_29,def){
+return (dj_undef(_29,obj)?def:obj[_29]);
+}
+return {is_debug_:_def(djc,"isDebug",false),base_script_uri_:_def(djc,"baseScriptUri",undefined),base_relative_path_:_def(djc,"baseRelativePath",""),library_script_uri_:_def(djc,"libraryScriptUri",""),auto_build_widgets_:_def(djc,"parseWidgets",true),ie_prevent_clobber_:_def(djc,"iePreventClobber",false),ie_clobber_minimal_:_def(djc,"ieClobberMinimal",false),name_:"(unset)",version_:"(unset)",pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_31,_32){
+this.modulePrefixes_[_31]={name:_31,value:_32};
+},getModulePrefix:function(_33){
+var mp=this.modulePrefixes_;
+if((mp[_33])&&(mp[_33]["name"])){
+return mp[_33].value;
+}
+return _33;
+},getTextStack:[],loadUriStack:[],loadedUris:[],modules_:{},modulesLoadedFired:false,modulesLoadedListeners:[],getName:function(){
+return this.name_;
+},getVersion:function(){
+return this.version_;
+},getText:function(uri){
+dj_unimplemented("getText","uri="+uri);
+},getLibraryScriptUri:function(){
+dj_unimplemented("getLibraryScriptUri","");
+}};
+})();
+dojo.hostenv.getBaseScriptUri=function(){
+if(!dj_undef("base_script_uri_",this)){
+return this.base_script_uri_;
+}
+var uri=this.library_script_uri_;
+if(!uri){
+uri=this.library_script_uri_=this.getLibraryScriptUri();
+if(!uri){
+dj_throw("Nothing returned by getLibraryScriptUri(): "+uri);
+}
+}
+var _36=uri.lastIndexOf("/");
+this.base_script_uri_=this.base_relative_path_;
+return this.base_script_uri_;
+};
+dojo.hostenv.setBaseScriptUri=function(uri){
+this.base_script_uri_=uri;
+};
+dojo.hostenv.loadPath=function(_37,_38,cb){
+if(!_37){
+dj_throw("Missing relpath argument");
+}
+if((_37.charAt(0)=="/")||(_37.match(/^\w+:/))){
+dj_throw("relpath '"+_37+"'; must be relative");
+}
+var uri=this.getBaseScriptUri()+_37;
+try{
+return ((!_38)?this.loadUri(uri):this.loadUriAndCheck(uri,_38));
+}
+catch(e){
+if(dojo.hostenv.is_debug_){
+dj_debug(e);
+}
+return false;
+}
+};
+dojo.hostenv.loadUri=function(uri,cb){
+if(dojo.hostenv.loadedUris[uri]){
+return;
+}
+var _40=this.getText(uri,null,true);
+if(_40==null){
+return 0;
+}
+var _41=dj_eval(_40);
+return 1;
+};
+dojo.hostenv.getDepsForEval=function(_42){
+if(!_42){
+_42="";
+}
+var _43=[];
+var tmp=_42.match(/dojo.hostenv.loadModule\(.*?\)/mg);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+tmp=_42.match(/dojo.hostenv.require\(.*?\)/mg);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+tmp=_42.match(/dojo.require\(.*?\)/mg);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+tmp=_42.match(/dojo.hostenv.conditionalLoadModule\([\w\W]*?\)/gm);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+return _43;
+};
+dojo.hostenv.loadUriAndCheck=function(uri,_46,cb){
+var ok=true;
+try{
+ok=this.loadUri(uri,cb);
+}
+catch(e){
+dj_debug("failed loading ",uri," with error: ",e);
+}
+return ((ok)&&(this.findModule(_46,false)))?true:false;
+};
+dojo.loaded=function(){
+};
+dojo.hostenv.loaded=function(){
+this.modulesLoadedFired=true;
+var mll=this.modulesLoadedListeners;
+for(var x=0;x<mll.length;x++){
+mll[x]();
+}
+dojo.loaded();
+};
+dojo.addOnLoad=function(obj,_49){
+if(arguments.length==1){
+dojo.hostenv.modulesLoadedListeners.push(obj);
+}else{
+if(arguments.length>1){
+dojo.hostenv.modulesLoadedListeners.push(function(){
+obj[_49]();
+});
+}
+}
+};
+dojo.hostenv.modulesLoaded=function(){
+if(this.modulesLoadedFired){
+return;
+}
+if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
+if(this.inFlightCount>0){
+dj_debug("couldn't initialize, there are files still in flight");
+return;
+}
+this.loaded();
+}
+};
+dojo.hostenv.moduleLoaded=function(_50){
+var _51=dj_eval_object_path((_50.split(".").slice(0,-1)).join("."));
+this.loaded_modules_[(new String(_50)).toLowerCase()]=_51;
+};
+dojo.hostenv.loadModule=function(_52,_53,_54){
+var _55=this.findModule(_52,false);
+if(_55){
+return _55;
+}
+if(dj_undef(_52,this.loading_modules_)){
+this.addedToLoadingCount.push(_52);
+}
+this.loading_modules_[_52]=1;
+var _56=_52.replace(/\./g,"/")+".js";
+var _57=_52.split(".");
+var _58=_52.split(".");
+for(var i=_57.length-1;i>0;i--){
+var _59=_57.slice(0,i).join(".");
+var _60=this.getModulePrefix(_59);
+if(_60!=_59){
+_57.splice(0,i,_60);
+break;
+}
+}
+var _61=_57[_57.length-1];
+if(_61=="*"){
+_52=(_58.slice(0,-1)).join(".");
+while(_57.length){
+_57.pop();
+_57.push(this.pkgFileName);
+_56=_57.join("/")+".js";
+if(_56.charAt(0)=="/"){
+_56=_56.slice(1);
+}
+ok=this.loadPath(_56,((!_54)?_52:null));
+if(ok){
+break;
+}
+_57.pop();
+}
+}else{
+_56=_57.join("/")+".js";
+_52=_58.join(".");
+var ok=this.loadPath(_56,((!_54)?_52:null));
+if((!ok)&&(!_53)){
+_57.pop();
+while(_57.length){
+_56=_57.join("/")+".js";
+ok=this.loadPath(_56,((!_54)?_52:null));
+if(ok){
+break;
+}
+_57.pop();
+_56=_57.join("/")+"/"+this.pkgFileName+".js";
+if(_56.charAt(0)=="/"){
+_56=_56.slice(1);
+}
+ok=this.loadPath(_56,((!_54)?_52:null));
+if(ok){
+break;
+}
+}
+}
+if((!ok)&&(!_54)){
+dj_throw("Could not load '"+_52+"'; last tried '"+_56+"'");
+}
+}
+if(!_54){
+_55=this.findModule(_52,false);
+if(!_55){
+dj_throw("symbol '"+_52+"' is not defined after loading '"+_56+"'");
+}
+}
+return _55;
+};
+function dj_load(_62,_63){
+return dojo.hostenv.loadModule(_62,_63);
+}
+dojo.hostenv.startPackage=function(_64){
+var _65=_64.split(/\./);
+if(_65[_65.length-1]=="*"){
+_65.pop();
+}
+return dj_eval_object_path(_65.join("."),true);
+};
+dojo.hostenv.findModule=function(_66,_67){
+if(!dj_undef(_66,this.modules_)){
+return this.modules_[_66];
+}
+if(this.loaded_modules_[(new String(_66)).toLowerCase()]){
+return this.loaded_modules_[_66];
+}
+var _68=dj_eval_object_path(_66);
+if((typeof _68!=="undefined")&&(_68)){
+return this.modules_[_66]=_68;
+}
+if(_67){
+dj_throw("no loaded module named '"+_66+"'");
+}
+return null;
+};
+dj_addNodeEvtHdlr=function(_69,_70,fp,_72){
+if(_69.attachEvent){
+_69.attachEvent("on"+_70,fp);
+}else{
+if(_69.addEventListener){
+_69.addEventListener(_70,fp,_72);
+}else{
+var _73=_69["on"+_70];
+if(typeof _73!="undefined"){
+_69["on"+_70]=function(){
+fp.apply(_69,arguments);
+_73.apply(_69,arguments);
+};
+}else{
+_69["on"+_70]=fp;
+}
+}
+}
+return true;
+};
+if(typeof window=="undefined"){
+dj_throw("no window object");
+}
+(function(){
+if((dojo.hostenv["base_script_uri_"]==""||dojo.hostenv["base_relative_path_"]=="")&&document&&document.getElementsByTagName){
+var _74=document.getElementsByTagName("script");
+var _75=/(__package__|dojo)\.js$/i;
+for(var i=0;i<_74.length;i++){
+var src=_74[i].getAttribute("src");
+if(_75.test(src)){
+var _77=src.replace(_75,"");
+if(dojo.hostenv["base_script_uri_"]==""){
+dojo.hostenv["base_script_uri_"]=_77;
+}
+if(dojo.hostenv["base_relative_path_"]==""){
+dojo.hostenv["base_relative_path_"]=_77;
+}
+break;
+}
+}
+}
+})();
+with(dojo.render){
+html.UA=navigator.userAgent;
+html.AV=navigator.appVersion;
+html.capable=true;
+html.support.builtin=true;
+ver=parseFloat(html.AV);
+os.mac=html.AV.indexOf("Macintosh")==-1?false:true;
+os.win=html.AV.indexOf("Windows")==-1?false:true;
+html.opera=html.UA.indexOf("Opera")==-1?false:true;
+html.khtml=((html.AV.indexOf("Konqueror")>=0)||(html.AV.indexOf("Safari")>=0))?true:false;
+html.safari=(html.AV.indexOf("Safari")>=0)?true:false;
+html.mozilla=html.moz=((html.UA.indexOf("Gecko")>=0)&&(!html.khtml))?true:false;
+html.ie=((document.all)&&(!html.opera))?true:false;
+html.ie50=html.ie&&html.AV.indexOf("MSIE 5.0")>=0;
+html.ie55=html.ie&&html.AV.indexOf("MSIE 5.5")>=0;
+html.ie60=html.ie&&html.AV.indexOf("MSIE 6.0")>=0;
+}
+dojo.hostenv.startPackage("dojo.hostenv");
+dojo.hostenv.name_="browser";
+dojo.hostenv.searchIds=[];
+var DJ_XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
+dojo.hostenv.getXmlhttpObject=function(){
+var _78=null;
+var _79=null;
+try{
+_78=new XMLHttpRequest();
+}
+catch(e){
+}
+if(!_78){
+for(var i=0;i<3;++i){
+var _80=DJ_XMLHTTP_PROGIDS[i];
+try{
+_78=new ActiveXObject(_80);
+}
+catch(e){
+_79=e;
+}
+if(_78){
+DJ_XMLHTTP_PROGIDS=[_80];
+break;
+}
+}
+}
+if((_79)&&(!_78)){
+dj_rethrow("Could not create a new ActiveXObject using any of the progids "+DJ_XMLHTTP_PROGIDS.join(", "),_79);
+}else{
+if(!_78){
+return dj_throw("No XMLHTTP implementation available, for uri "+uri);
+}
+}
+return _78;
+};
+dojo.hostenv.getText=function(uri,_81,_82){
+var _83=this.getXmlhttpObject();
+if(_81){
+_83.onreadystatechange=function(){
+if((4==_83.readyState)&&(_83["status"])){
+if(_83.status==200){
+dj_debug("LOADED URI: "+uri);
+_81(_83.responseText);
+}
+}
+};
+}
+_83.open("GET",uri,_81?true:false);
+_83.send(null);
+if(_81){
+return null;
+}
+return _83.responseText;
+};
+function dj_last_script_src(){
+var _84=window.document.getElementsByTagName("script");
+if(_84.length<1){
+dj_throw("No script elements in window.document, so can't figure out my script src");
+}
+var _85=_84[_84.length-1];
+var src=_85.src;
+if(!src){
+dj_throw("Last script element (out of "+_84.length+") has no src");
+}
+return src;
+}
+if(!dojo.hostenv["library_script_uri_"]){
+dojo.hostenv.library_script_uri_=dj_last_script_src();
+}
+dojo.hostenv.println=function(s){
+var ti=null;
+var dis="<div>"+s+"</div>";
+try{
+ti=document.createElement("div");
+document.body.appendChild(ti);
+ti.innerHTML=s;
+}
+catch(e){
+try{
+document.write(dis);
+}
+catch(e2){
+window.status=s;
+}
+}
+delete ti;
+delete dis;
+delete s;
+};
+dj_addNodeEvtHdlr(window,"load",function(){
+if(dojo.render.html.ie){
+dojo.hostenv.makeWidgets();
+}
+dojo.hostenv.modulesLoaded();
+});
+dojo.hostenv.makeWidgets=function(){
+if((dojo.hostenv.auto_build_widgets_)||(dojo.hostenv.searchIds.length>0)){
+if(dj_eval_object_path("dojo.widget.Parse")){
+try{
+var _88=new dojo.xml.Parse();
+var _89=dojo.hostenv.searchIds;
+if(_89.length>0){
+for(var x=0;x<_89.length;x++){
+if(!document.getElementById(_89[x])){
+continue;
+}
+var _90=_88.parseElement(document.getElementById(_89[x]),null,true);
+dojo.widget.getParser().createComponents(_90);
+}
+}else{
+if(dojo.hostenv.auto_build_widgets_){
+var _90=_88.parseElement(document.body,null,true);
+dojo.widget.getParser().createComponents(_90);
+}
+}
+}
+catch(e){
+dj_debug("auto-build-widgets error:",e);
+}
+}
+}
+};
+dojo.hostenv.modulesLoadedListeners.push(function(){
+if(!dojo.render.html.ie){
+dojo.hostenv.makeWidgets();
+}
+});
+if((!window["djConfig"])||(!window["djConfig"]["preventBackButtonFix"])){
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+}
+dojo.hostenv.writeIncludes=function(){
+};
+dojo.hostenv.conditionalLoadModule=function(_91){
+var _92=_91["common"]||[];
+var _93=(_91[dojo.hostenv.name_])?_92.concat(_91[dojo.hostenv.name_]||[]):_92.concat(_91["default"]||[]);
+for(var x=0;x<_93.length;x++){
+var _94=_93[x];
+if(_94.constructor==Array){
+dojo.hostenv.loadModule.apply(dojo.hostenv,_94);
+}else{
+dojo.hostenv.loadModule(_94);
+}
+}
+};
+dojo.hostenv.require=dojo.hostenv.loadModule;
+dojo.require=function(){
+dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
+};
+dojo.requireIf=function(){
+if((arguments[0]=="common")||(dojo.render[arguments[0]].capable)){
+dojo.require(arguments[1],arguments[2],arguments[3]);
+}
+};
+dojo.conditionalRequire=dojo.requireIf;
+dojo.kwCompoundRequire=function(){
+dojo.hostenv.conditionalLoadModule.apply(dojo.hostenv,arguments);
+};
+dojo.hostenv.provide=dojo.hostenv.startPackage;
+dojo.provide=function(){
+dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
+};
+dojo.provide("dojo.io.IO");
+dojo.io.transports=[];
+dojo.io.hdlrFuncNames=["load","error"];
+dojo.io.Request=function(url,mt,_97,_98){
+this.url=url;
+this.mimetype=mt;
+this.transport=_97;
+this.changeUrl=_98;
+this.formNode=null;
+this.events_={};
+var _99=this;
+this.error=function(type,_101){
+switch(type){
+case "io":
+var _102=dojo.io.IOEvent.IO_ERROR;
+var _103="IOError: error during IO";
+break;
+case "parse":
+var _102=dojo.io.IOEvent.PARSE_ERROR;
+var _103="IOError: error during parsing";
+default:
+var _102=dojo.io.IOEvent.UNKOWN_ERROR;
+var _103="IOError: cause unkown";
+}
+var _104=new dojo.io.IOEvent("error",null,_99,_103,this.url,_102);
+_99.dispatchEvent(_104);
+if(_99.onerror){
+_99.onerror(_103,_99.url,_104);
+}
+};
+this.load=function(type,data,evt){
+var _107=new dojo.io.IOEvent("load",data,_99,null,null,null);
+_99.dispatchEvent(_107);
+if(_99.onload){
+_99.onload(_107);
+}
+};
+this.backButton=function(){
+var _108=new dojo.io.IOEvent("backbutton",null,_99,null,null,null);
+_99.dispatchEvent(_108);
+if(_99.onbackbutton){
+_99.onbackbutton(_108);
+}
+};
+this.forwardButton=function(){
+var _109=new dojo.io.IOEvent("forwardbutton",null,_99,null,null,null);
+_99.dispatchEvent(_109);
+if(_99.onforwardbutton){
+_99.onforwardbutton(_109);
+}
+};
+};
+dojo.io.Request.prototype.addEventListener=function(type,func){
+if(!this.events_[type]){
+this.events_[type]=[];
+}
+for(var i=0;i<this.events_[type].length;i++){
+if(this.events_[type][i]==func){
+return;
+}
+}
+this.events_[type].push(func);
+};
+dojo.io.Request.prototype.removeEventListener=function(type,func){
+if(!this.events_[type]){
+return;
+}
+for(var i=0;i<this.events_[type].length;i++){
+if(this.events_[type][i]==func){
+this.events_[type].splice(i,1);
+}
+}
+};
+dojo.io.Request.prototype.dispatchEvent=function(evt){
+if(!this.events_[evt.type]){
+return;
+}
+for(var i=0;i<this.events_[evt.type].length;i++){
+this.events_[evt.type][i](evt);
+}
+return false;
+};
+dojo.io.IOEvent=function(type,data,_111,_112,_113,_114){
+this.type=type;
+this.data=data;
+this.request=_111;
+this.errorMessage=_112;
+this.errorUrl=_113;
+this.errorCode=_114;
+};
+dojo.io.IOEvent.UNKOWN_ERROR=0;
+dojo.io.IOEvent.IO_ERROR=1;
+dojo.io.IOEvent.PARSE_ERROR=2;
+dojo.io.Error=function(msg,type,num){
+this.message=msg;
+this.type=type||"unknown";
+this.number=num||0;
+};
+dojo.io.transports.addTransport=function(name){
+this.push(name);
+this[name]=dojo.io[name];
+};
+dojo.io.bind=function(_117){
+if(!_117["url"]){
+_117.url="";
+}else{
+_117.url=_117.url.toString();
+}
+if(!_117["mimetype"]){
+_117.mimetype="text/plain";
+}
+if(!_117["method"]&&!_117["formNode"]){
+_117.method="get";
+}else{
+if(_117["formNode"]){
+_117.method=_117["method"]||_117["formNode"].method||"get";
+}
+}
+if(_117["handler"]){
+_117.handle=_117.handler;
+}
+if(!_117["handle"]){
+_117.handle=function(){
+};
+}
+if(_117["loaded"]){
+_117.load=_117.loaded;
+}
+if(_117["changeUrl"]){
+_117.changeURL=_117.changeUrl;
+}
+for(var x=0;x<this.hdlrFuncNames.length;x++){
+var fn=this.hdlrFuncNames[x];
+if(typeof _117[fn]=="function"){
+continue;
+}
+if(typeof _117.handler=="object"){
+if(typeof _117.handler[fn]=="function"){
+_117[fn]=_117.handler[fn]||_117.handler["handle"]||function(){
+};
+}
+}else{
+if(typeof _117["handler"]=="function"){
+_117[fn]=_117.handler;
+}else{
+if(typeof _117["handle"]=="function"){
+_117[fn]=_117.handle;
+}
+}
+}
+}
+var _119="";
+if(_117["transport"]){
+_119=_117["transport"];
+if(!this[_119]){
+return false;
+}
+}else{
+for(var x=0;x<dojo.io.transports.length;x++){
+var tmp=dojo.io.transports[x];
+if((this[tmp])&&(this[tmp].canHandle(_117))){
+_119=tmp;
+}
+}
+if(_119==""){
+return false;
+}
+}
+this[_119].bind(_117);
+return true;
+};
+dojo.io.argsFromMap=function(map){
+var _121=new Object();
+var _122="";
+for(var x in map){
+if(!_121[x]){
+_122+=encodeURIComponent(x)+"="+encodeURIComponent(map[x])+"&";
+}
+}
+return _122;
+};
+dojo.provide("dojo.alg.Alg");
+dojo.alg.find=function(arr,val){
+for(var i=0;i<arr.length;++i){
+if(arr[i]==val){
+return i;
+}
+}
+return -1;
+};
+dojo.alg.inArray=function(arr,val){
+if((!arr||arr.constructor!=Array)&&(val&&val.constructor==Array)){
+var a=arr;
+arr=val;
+val=a;
+}
+return dojo.alg.find(arr,val)>-1;
+};
+dojo.alg.inArr=dojo.alg.inArray;
+dojo.alg.getNameInObj=function(ns,item){
+if(!ns){
+ns=dj_global;
+}
+for(var x in ns){
+if(ns[x]===item){
+return new String(x);
+}
+}
+return null;
+};
+dojo.alg.has=function(obj,name){
+return (typeof obj[name]!=="undefined");
+};
+dojo.alg.forEach=function(arr,_128,_129){
+var il=arr.length;
+for(var i=0;i<((_129)?il:arr.length);i++){
+if(_128(arr[i])=="break"){
+break;
+}
+}
+};
+dojo.alg.for_each=dojo.alg.forEach;
+dojo.alg.map=function(arr,obj,_131){
+for(var i=0;i<arr.length;++i){
+_131.call(obj,arr[i]);
+}
+};
+dojo.alg.tryThese=function(){
+for(var x=0;x<arguments.length;x++){
+try{
+if(typeof arguments[x]=="function"){
+var ret=(arguments[x]());
+if(ret){
+return ret;
+}
+}
+}
+catch(e){
+dj_debug(e);
+}
+}
+};
+dojo.alg.delayThese=function(farr,cb,_134,_135){
+if(!farr.length){
+if(typeof _135=="function"){
+_135();
+}
+return;
+}
+if((typeof _134=="undefined")&&(typeof cb=="number")){
+_134=cb;
+cb=function(){
+};
+}else{
+if(!cb){
+cb=function(){
+};
+}
+}
+setTimeout(function(){
+(farr.shift())();
+cb();
+dojo.alg.delayThese(farr,cb,_134,_135);
+},_134);
+};
+dojo.alg.for_each_call=dojo.alg.map;
+dojo.require("dojo.alg.Alg",false,true);
+dojo.hostenv.moduleLoaded("dojo.alg.*");
+dojo.provide("dojo.io.BrowserIO");
+dojo.require("dojo.io.IO");
+dojo.require("dojo.alg.*");
+dojo.io.checkChildrenForFile=function(node){
+var _137=false;
+var _138=node.getElementsByTagName("input");
+dojo.alg.forEach(_138,function(_139){
+if(_137){
+return;
+}
+if(_139.getAttribute("type")=="file"){
+_137=true;
+}
+});
+return _137;
+};
+dojo.io.formHasFile=function(_140){
+return dojo.io.checkChildrenForFile(_140);
+};
+dojo.io.encodeForm=function(_141){
+if((!_141)||(!_141.tagName)||(!_141.tagName.toLowerCase()=="form")){
+dj_throw("Attempted to encode a non-form element.");
+}
+var ec=encodeURIComponent;
+var _143=[];
+for(var i=0;i<_141.elements.length;i++){
+var elm=_141.elements[i];
+if(elm.disabled){
+continue;
+}
+var name=ec(elm.name);
+var type=elm.type.toLowerCase();
+if((type=="select")&&(elm.multiple)){
+for(var j=0;j<elm.options.length;j++){
+_143.push(name+"="+ec(elm.options[j].value));
+}
+}else{
+if(dojo.alg.inArray(type,["radio","checked"])){
+if(elm.checked){
+_143.push(name+"="+ec(elm.value));
+}
+}else{
+if(!dojo.alg.inArray(type,["file","submit","reset","button"])){
+_143.push(name+"="+ec(elm.value));
+}
+}
+}
+}
+return _143.join("&");
+};
+dojo.io.setIFrameSrc=function(_146,src,_147){
+try{
+var r=dojo.render.html;
+if(!_147){
+if(r.safari){
+_146.location=src;
+}else{
+frames[_146.name].location=src;
+}
+}else{
+var idoc=(r.moz)?_146.contentWindow:_146;
+idoc.location.replace(src);
+dj_debug(_146.contentWindow.location);
+}
+}
+catch(e){
+dj_debug("setIFrameSrc: "+e);
+}
+};
+dojo.io.createIFrame=function(_150){
+if(window[_150]){
+return window[_150];
+}
+if(window.frames[_150]){
+return window.frames[_150];
+}
+var r=dojo.render.html;
+var _151=null;
+_151=document.createElement((((r.ie)&&(r.win))?"<iframe name="+_150+">":"iframe"));
+with(_151){
+name=_150;
+setAttribute("name",_150);
+id=_150;
+}
+window[_150]=_151;
+document.body.appendChild(_151);
+with(_151.style){
+position="absolute";
+left=top="0px";
+height=width="1px";
+visibility="hidden";
+if(dojo.hostenv.is_debug_){
+position="relative";
+height="100px";
+width="300px";
+visibility="visible";
+}
+}
+dojo.io.setIFrameSrc(_151,dojo.hostenv.getBaseScriptUri()+"iframe_history.html",true);
+return _151;
+};
+dojo.io.cancelDOMEvent=function(evt){
+if(!evt){
+return false;
+}
+if(evt.preventDefault){
+evt.stopPropagation();
+evt.preventDefault();
+}else{
+if(window.event){
+window.event.cancelBubble=true;
+window.event.returnValue=false;
+}
+}
+return false;
+};
+dojo.io.XMLHTTPTransport=new function(){
+var _152=this;
+this.initialHref=window.location.href;
+this.initialHash=window.location.hash;
+this.moveForward=false;
+var _153={};
+this.useCache=false;
+this.historyStack=[];
+this.forwardStack=[];
+this.historyIframe=null;
+this.bookmarkAnchor=null;
+this.locationTimer=null;
+function getCacheKey(url,_154,_155){
+return url+"|"+_154+"|"+_155.toLowerCase();
+}
+function addToCache(url,_156,_157,http){
+_153[getCacheKey(url,_156,_157)]=http;
+}
+function getFromCache(url,_159,_160){
+return _153[getCacheKey(url,_159,_160)];
+}
+this.clearCache=function(){
+_153={};
+};
+function doLoad(_161,http,url,_162,_163){
+if(http.status==200||(location.protocol=="file:"&&http.status==0)){
+var ret;
+if(_161.method.toLowerCase()=="head"){
+var _164=http.getAllResponseHeaders();
+ret={};
+ret.toString=function(){
+return _164;
+};
+var _165=_164.split(/[\r\n]+/g);
+for(var i=0;i<_165.length;i++){
+var pair=_165[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+if(pair){
+ret[pair[1]]=pair[2];
+}
+}
+}else{
+if(_161.mimetype=="text/javascript"){
+ret=dj_eval(http.responseText);
+}else{
+if(_161.mimetype=="text/xml"){
+ret=http.responseXML;
+if(!ret||typeof ret=="string"){
+ret=dojo.xml.domUtil.createDocumentFromText(http.responseText);
+}
+}else{
+ret=http.responseText;
+}
+}
+}
+if(_163){
+addToCache(url,_162,_161.method,http);
+}
+if(typeof _161.load=="function"){
+_161.load("load",ret,http);
+}
+}else{
+var _167=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+if(typeof _161.error=="function"){
+_161.error("error",_167,http);
+}
+}
+}
+function setHeaders(http,_168){
+if(_168["headers"]){
+for(var _169 in _168["headers"]){
+if(_169.toLowerCase()=="content-type"&&!_168["contentType"]){
+_168["contentType"]=_168["headers"][_169];
+}else{
+http.setRequestHeader(_169,_168["headers"][_169]);
+}
+}
+}
+}
+this.addToHistory=function(args){
+var _171=args["back"]||args["backButton"]||args["handle"];
+var hash=null;
+if(!this.historyIframe){
+this.historyIframe=window.frames["djhistory"];
+}
+if(!this.bookmarkAnchor){
+this.bookmarkAnchor=document.createElement("a");
+document.body.appendChild(this.bookmarkAnchor);
+this.bookmarkAnchor.style.display="none";
+}
+if((!args["changeURL"])||(dojo.render.html.ie)){
+var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+this.moveForward=true;
+dojo.io.setIFrameSrc(this.historyIframe,url,false);
+}
+if(args["changeURL"]){
+hash="#"+((args["changeURL"]!==true)?args["changeURL"]:(new Date()).getTime());
+setTimeout("window.location.href = '"+hash+"';",1);
+this.bookmarkAnchor.href=hash;
+if(dojo.render.html.ie){
+var _173=_171;
+var lh=null;
+var hsl=this.historyStack.length-1;
+if(hsl>=0){
+while(!this.historyStack[hsl]["urlHash"]){
+hsl--;
+}
+lh=this.historyStack[hsl]["urlHash"];
+}
+if(lh){
+_171=function(){
+if(window.location.hash!=""){
+setTimeout("window.location.href = '"+lh+"';",1);
+}
+_173();
+};
+}
+this.forwardStack=[];
+var _176=args["forward"]||args["forwardButton"];
+var tfw=function(){
+if(window.location.hash!=""){
+window.location.href=hash;
+}
+if(_176){
+_176();
+}
+};
+if(args["forward"]){
+args.forward=tfw;
+}else{
+if(args["forwardButton"]){
+args.forwardButton=tfw;
+}
+}
+}else{
+if(dojo.render.html.moz){
+if(!this.locationTimer){
+this.locationTimer=setInterval("dojo.io.XMLHTTPTransport.checkLocation();",200);
+}
+}
+}
+}
+this.historyStack.push({"url":url,"callback":_171,"kwArgs":args,"urlHash":hash});
+};
+this.checkLocation=function(){
+var hsl=this.historyStack.length;
+if((window.location.hash==this.initialHash)||(window.location.href==this.initialHref)&&(hsl==1)){
+this.handleBackButton();
+return;
+}
+if(this.forwardStack.length>0){
+if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
+this.handleForwardButton();
+return;
+}
+}
+if((hsl>=2)&&(this.historyStack[hsl-2])){
+if(this.historyStack[hsl-2].urlHash==window.location.hash){
+this.handleBackButton();
+return;
+}
+}
+};
+this.iframeLoaded=function(evt,_178){
+var isp=_178.href.split("?");
+if(isp.length<2){
+if(this.historyStack.length==1){
+this.handleBackButton();
+}
+return;
+}
+var _180=isp[1];
+if(this.moveForward){
+this.moveForward=false;
+return;
+}
+var last=this.historyStack.pop();
+if(!last){
+if(this.forwardStack.length>0){
+var next=this.forwardStack[this.forwardStack.length-1];
+if(_180==next.url.split("?")[1]){
+this.handleForwardButton();
+}
+}
+return;
+}
+this.historyStack.push(last);
+if(this.historyStack.length>=2){
+if(isp[1]==this.historyStack[this.historyStack.length-2].url.split("?")[1]){
+this.handleBackButton();
+}
+}else{
+this.handleBackButton();
+}
+};
+this.handleBackButton=function(){
+var last=this.historyStack.pop();
+if(!last){
+return;
+}
+if(last["callback"]){
+last.callback();
+}else{
+if(last.kwArgs["backButton"]){
+last.kwArgs["backButton"]();
+}else{
+if(last.kwArgs["back"]){
+last.kwArgs["back"]();
+}else{
+if(last.kwArgs["handle"]){
+last.kwArgs.handle("back");
+}
+}
+}
+}
+this.forwardStack.push(last);
+};
+this.handleForwardButton=function(){
+var last=this.forwardStack.pop();
+if(!last){
+return;
+}
+if(last.kwArgs["forward"]){
+last.kwArgs.forward();
+}else{
+if(last.kwArgs["forwardButton"]){
+last.kwArgs.forwardButton();
+}else{
+if(last.kwArgs["handle"]){
+last.kwArgs.handle("forward");
+}
+}
+}
+this.historyStack.push(last);
+};
+var _183=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_184){
+return _183&&dojo.alg.inArray(_184["mimetype"],["text/plain","text/html","text/xml","text/javascript"])&&dojo.alg.inArray(_184["method"].toLowerCase(),["post","get","head"])&&!(_184["formNode"]&&dojo.io.formHasFile(_184["formNode"]));
+};
+this.bind=function(_185){
+if(!_185["url"]){
+if(!_185["formNode"]&&(_185["backButton"]||_185["back"]||_185["changeURL"]||_185["watchForURL"])&&(!window["djConfig"]&&!window["djConfig"]["preventBackButtonFix"])){
+this.addToHistory(_185);
+return true;
+}
+}
+var url=_185.url;
+var _186="";
+if(_185["formNode"]){
+var ta=_185.formNode.getAttribute("action");
+if((ta)&&(!_185["url"])){
+url=ta;
+}
+var tp=_185.formNode.getAttribute("method");
+if((tp)&&(!_185["method"])){
+_185.method=tp;
+}
+_186+=dojo.io.encodeForm(_185.formNode);
+}
+if(!_185["method"]){
+_185.method="get";
+}
+if(_185["content"]){
+_186+=dojo.io.argsFromMap(_185.content);
+}
+if(_185["postContent"]&&_185.method.toLowerCase()=="post"){
+_186=_185.postContent;
+}
+if(_185["backButton"]||_185["back"]||_185["changeURL"]){
+this.addToHistory(_185);
+}
+var _189=_185["sync"]?false:true;
+var _190=_185["useCache"]==true||(this.useCache==true&&_185["useCache"]!=false);
+if(_190){
+var _191=getFromCache(url,_186,_185.method);
+if(_191){
+doLoad(_185,_191,url,_186,false);
+return;
+}
+}
+var http=dojo.hostenv.getXmlhttpObject();
+var _192=false;
+if(_189){
+http.onreadystatechange=function(){
+if(4==http.readyState){
+if(_192){
+return;
+}
+_192=true;
+doLoad(_185,http,url,_186,_190);
+}
+};
+}
+if(_185.method.toLowerCase()=="post"){
+http.open("POST",url,_189);
+setHeaders(http,_185);
+http.setRequestHeader("Content-Type",_185["contentType"]||"application/x-www-form-urlencoded");
+http.send(_186);
+}else{
+var _193=url;
+if(_186!=""){
+_193+=(url.indexOf("?")>-1?"&":"?")+_186;
+}
+http.open(_185.method.toUpperCase(),_193,_189);
+setHeaders(http,_185);
+http.send(null);
+}
+if(!_189){
+doLoad(_185,http,url,_186,_190);
+}
+return;
+};
+dojo.io.transports.addTransport("XMLHTTPTransport");
+};
+
Propchange: struts/flow/trunk/src/examples/remote/dojo-io.js
------------------------------------------------------------------------------
svn:executable = *
Added: struts/flow/trunk/src/examples/remote/json.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/remote/json.js?rev=349272&view=auto
==============================================================================
--- struts/flow/trunk/src/examples/remote/json.js (added)
+++ struts/flow/trunk/src/examples/remote/json.js Sun Nov 27 10:21:07 2005
@@ -0,0 +1,235 @@
+/*
+Copyright (c) 2005 JSON.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+/*
+ The global object JSON contains two methods.
+
+ JSON.stringify(value) takes a JavaScript value and produces a JSON text.
+ The value must not be cyclical.
+
+ JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
+ throw a 'JSONError' exception if there is an error.
+*/
+var JSON = {
+ copyright: '(c)2005 JSON.org',
+ license: 'http://www.crockford.com/JSON/license.html',
+/*
+ Stringify a JavaScript value, producing a JSON text.
+*/
+ stringify: function (v) {
+ var a = [];
+
+/*
+ Emit a string.
+*/
+ function e(s) {
+ a[a.length] = s;
+ }
+
+/*
+ Convert a value.
+*/
+ function g(x) {
+ var c, i, l, v;
+
+ switch (typeof x) {
+ case 'object':
+ if (x) {
+ if (x instanceof Array) {
+ e('[');
+ l = a.length;
+ for (i = 0; i < x.length; i += 1) {
+ v = x[i];
+ if (typeof v != 'undefined' &&
+ typeof v != 'function') {
+ if (l < a.length) {
+ e(',');
+ }
+ g(v);
+ }
+ }
+ e(']');
+ return;
+ } else if (typeof x.toString != 'undefined') {
+ e('{');
+ l = a.length;
+ for (i in x) {
+ v = x[i];
+ if (x.hasOwnProperty(i) &&
+ typeof v != 'undefined' &&
+ typeof v != 'function') {
+ if (l < a.length) {
+ e(',');
+ }
+ g(i);
+ e(':');
+ g(v);
+ }
+ }
+ return e('}');
+ }
+ }
+ e('null');
+ return;
+ case 'number':
+ e(isFinite(x) ? +x : 'null');
+ return;
+ case 'string':
+ l = x.length;
+ e('"');
+ for (i = 0; i < l; i += 1) {
+ c = x.charAt(i);
+ if (c >= ' ') {
+ if (c == '\\' || c == '"') {
+ e('\\');
+ }
+ e(c);
+ } else {
+ switch (c) {
+ case '\b':
+ e('\\b');
+ break;
+ case '\f':
+ e('\\f');
+ break;
+ case '\n':
+ e('\\n');
+ break;
+ case '\r':
+ e('\\r');
+ break;
+ case '\t':
+ e('\\t');
+ break;
+ default:
+ c = c.charCodeAt();
+ e('\\u00' + Math.floor(c / 16).toString(16) +
+ (c % 16).toString(16));
+ }
+ }
+ }
+ e('"');
+ return;
+ case 'boolean':
+ e(String(x));
+ return;
+ default:
+ e('null');
+ return;
+ }
+ }
+ g(v);
+ return a.join('');
+ },
+/*
+ Parse a JSON text, producing a JavaScript value.
+*/
+ parse: function (text) {
+ var p = /^\s*(([,:{}\[\]])|"(\\.|[^\x00-\x1f"\\])*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)\s*/,
+ token,
+ operator;
+
+ function error(m, t) {
+ throw {
+ name: 'JSONError',
+ message: m,
+ text: t || operator || token
+ };
+ }
+
+ function next(b) {
+ if (b && b != operator) {
+ error("Expected '" + b + "'");
+ }
+ if (text) {
+ var t = p.exec(text);
+ if (t) {
+ if (t[2]) {
+ token = null;
+ operator = t[2];
+ } else {
+ operator = null;
+ try {
+ token = eval(t[1]);
+ } catch (e) {
+ error("Bad token", t[1]);
+ }
+ }
+ text = text.substring(t[0].length);
+ } else {
+ error("Unrecognized token", text);
+ }
+ } else {
+ token = operator = undefined;
+ }
+ }
+
+
+ function val() {
+ var k, o;
+ switch (operator) {
+ case '{':
+ next('{');
+ o = {};
+ if (operator != '}') {
+ for (;;) {
+ if (operator || typeof token != 'string') {
+ error("Missing key");
+ }
+ k = token;
+ next();
+ next(':');
+ o[k] = val();
+ if (operator != ',') {
+ break;
+ }
+ next(',');
+ }
+ }
+ next('}');
+ return o;
+ case '[':
+ next('[');
+ o = [];
+ if (operator != ']') {
+ for (;;) {
+ o.push(val());
+ if (operator != ',') {
+ break;
+ }
+ next(',');
+ }
+ }
+ next(']');
+ return o;
+ default:
+ if (operator !== null) {
+ error("Missing value");
+ }
+ k = token;
+ next();
+ return k;
+ }
+ }
+ next();
+ return val();
+ }
+};
Propchange: struts/flow/trunk/src/examples/remote/json.js
------------------------------------------------------------------------------
svn:executable = *
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java Sun Nov 27 10:21:07 2005
@@ -153,10 +153,11 @@
sb.append(buffer, 0, len);
}
String json = sb.toString();
- System.out.println("processing json:"+json);
+ if (log.isDebugEnabled()) {
+ log.debug("processing json:"+json);
+ }
if (isValidJSON(json)) {
context.put("json", json);
- System.out.println("setting json:"+json);
}
}
@@ -178,6 +179,9 @@
// if a flowcall, return pure json
if (isFlowCall) {
String json = new JSONSerializer().serialize(atts);
+ if (log.isDebugEnabled()) {
+ log.debug("returning json: "+json);
+ }
response.getWriter().write(json);
response.getWriter().flush();
response.getWriter().close();
@@ -250,8 +254,17 @@
private boolean isValidJSON(String val) {
try {
- JSONArray obj = new JSONArray(val);
- return true;
+ if (val != null && val.length() > 1) {
+ JSONArray obj = new JSONArray(val);
+ if (log.isDebugEnabled()) {
+ log.debug("Valid JSON");
+ }
+ return true;
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("No JSON detected");
+ }
+ }
} catch (Exception ex) {
log.warn("Invalid JSON object", ex);
}
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java Sun Nov 27 10:21:07 2005
@@ -173,7 +173,7 @@
for (Iterator i = classes.values().iterator(); i.hasNext(); ) {
Class cls = (Class) i.next();
- System.out.println("Registring "+cls.getName());
+ log.info("Registring "+cls.getName());
classesToRegister.add(cls);
}
} catch (Exception ex) {
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java Sun Nov 27 10:21:07 2005
@@ -397,8 +397,11 @@
/**
* Initializes new top-level scope.
*/
- public ThreadScope(Global scope, Map flowVars) throws Exception {
+ public ThreadScope(Global scope, Map flowVars, WrapFactory wrapFactory) throws Exception {
final Context context = Context.getCurrentContext();
+ if (wrapFactory != null) {
+ context.setWrapFactory(wrapFactory);
+ }
final String[] names = { "importClass" };
try {
@@ -433,8 +436,12 @@
Object bean = varfactory.getInstance(this, flow);
- Scriptable var = (Scriptable) factory.wrap(context, this, bean, bean.getClass());
- super.put(name, this, var);
+ if (bean instanceof Scriptable) {
+ super.put(name, this, (Scriptable) bean);
+ } else {
+ Scriptable var = (Scriptable) factory.wrapAsJavaObject(context, this, bean, bean.getClass());
+ super.put(name, this, var);
+ }
}
defineProperty(LAST_EXEC_TIME,
@@ -518,7 +525,7 @@
}
private ThreadScope createThreadScope() throws Exception {
- return new ThreadScope(scope, flowVars);
+ return new ThreadScope(scope, flowVars, wrapFactory);
}
/**
@@ -697,6 +704,9 @@
context.setGeneratingDebug(true);
context.setCompileFunctionsWithDynamicScope(true);
context.setErrorReporter(new JSErrorReporter(getLogger()));
+ if (wrapFactory != null) {
+ context.setWrapFactory(wrapFactory);
+ }
LocationTrackingDebugger locationTracker = new LocationTrackingDebugger();
if (!enableDebugger) {
@@ -780,6 +790,9 @@
context.setGeneratingDebug(true);
context.setCompileFunctionsWithDynamicScope(true);
LocationTrackingDebugger locationTracker = new LocationTrackingDebugger();
+ if (wrapFactory != null) {
+ context.setWrapFactory(wrapFactory);
+ }
if (!enableDebugger) {
//FIXME: add a "tee" debugger that allows both to be used simultaneously
context.setDebugger(locationTracker, null);
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java Sun Nov 27 10:21:07 2005
@@ -30,6 +30,8 @@
import org.codehaus.janino.SimpleCompiler;
+import org.apache.commons.logging.*;
+
/**
* JavaScript interface to the log facility.
*
@@ -39,6 +41,8 @@
protected static SqlMapClient client;
protected String namespace;
protected Map statements = new HashMap();
+
+ protected static final Log log = LogFactory.getLog(SqlMap.class);
/** Constructor for the JSLog object */
@@ -94,7 +98,7 @@
}
public void setNamespace(String ns) {
- System.out.println("setting namespace");
+ log.debug("setting namespace");
this.namespace = ns;
statements.clear();
SqlMapClientImpl cimpl = (SqlMapClientImpl)client;
@@ -102,9 +106,9 @@
String name;
for (Iterator i = del.getMappedStatementNames(); i.hasNext(); ) {
name = (String) i.next();
- System.out.println("looking at statement "+name);
+ log.debug("looking at statement "+name);
if (name.startsWith(namespace+".")) {
- System.out.println("adding statement "+name);
+ log.debug("adding statement "+name);
statements.put(name.substring(namespace.length() + 1), del.getMappedStatement(name));
}
}
@@ -139,10 +143,10 @@
public Object get(final String name, Scriptable start) {
- System.out.println("getting property "+name);
+ log.debug("getting property "+name);
final MappedStatement ms = (MappedStatement) statements.get(name);
if (ms != null) {
- System.out.println("found as a function");
+ log.debug("found as a function");
return new ExtensionFunction() {
public Object execute(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
throws IOException {
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java Sun Nov 27 10:21:07 2005
@@ -17,7 +17,7 @@
import org.apache.struts.flow.core.javascript.fom.FOM_JavaScriptInterpreter;
import org.apache.struts.flow.core.Interpreter;
import org.apache.struts.flow.core.javascript.ConversionHelper;
-import org.apache.struts.flow.core.DefaultCallVariableRegistrar;
+import org.apache.struts.flow.core.DefaultFlowVariableFactory;
import org.apache.struts.flow.sugar.SugarWrapFactory;
import org.apache.commons.chain.*;
import org.apache.commons.chain.web.portlet.*;
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java Sun Nov 27 10:21:07 2005
@@ -81,7 +81,7 @@
*/
public Scriptable wrapAsJavaObject(Context cx, Scriptable scope,
Object javaObject, Class staticType) {
-
+
Map map = getExtensionFunctions(javaObject.getClass());
Scriptable wrap = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org