Hi,

I have experienced an error using IE (5.5 and 6) with seam remoting.  

I believe I have a fix for the error, but was just wanting to check if anyone 
else has experienced it and whether my understanding is correct.

The error message is 'field is null or not an object' and occurs in 'data += 
meta.field;' from seam/remoting/resource/remote.js :

  
  | var meta = isComponent ? Seam.Component.getMetadata(obj) : 
Seam.Remoting.getMetadata(obj);
  |   for (var i = 0; i < meta.length; i++)
  |   {
  |     data += "<member name=\"";
  |     data += meta.field;
  |     data += "\">";
  |     data += Seam.Remoting.serializeValue(obj[meta.field], meta.type, refs);
  |     data += "</member>\n";
  |   }
  | 


Here is the generated interface the error occurred on:


  | Seam.Remoting.type.status.__name = "status";
  | Seam.Remoting.type.status.__metadata = [
  |   {field: "code", type: "str"},
  |   {field: "disabled", type: "bool"},
  |   {field: "description", type: "str"},
  |   {field: "id", type: "number"},
  |   {field: "version", type: "number"},
  | ];
  | 

The generated interface code has a comma after the last field array value which 
makes IE treat the whole array as having length 6 (with an undefined element at 
the end) whereas firefox ignores the comma and treats the array as having a 
length of 5.   IE iterates through all 5 valid fields, but then can't process 
the undefined 6th array element and fails.
IE seems in this case to have the more correct javascript interpretation.


To fix the issue, I made the following minor change to the 
org.jboss.seam.remoting.InterfaceGenerator class, rebuilt it and now it works 
fine on IE and Firefox.


  |     int i = 0;
  |     for (String key : metadata.keySet())
  |     {
  |       typeSource.append("  {field: \"");
  |       typeSource.append(key);
  |       typeSource.append("\", type: \"");
  |       typeSource.append(metadata.get(key));
  |       typeSource.append("\"}");
  |       
  |       // can't put ',' after last element of the generated array or 
javascript will interpret as undefined element
  |       if(i != metadata.keySet().size() -1){
  |           typeSource.append(",");
  |       }
  |       typeSource.append("\n");
  |       
  |       i++; 
  |     }
  | 


Happy to create a JIRA issue, but just wanted to check I was on the right track,

Regards

Samual


View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3966206#3966206

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3966206
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to