[Zope] IE 4/5 error

Martijn Pieters mj@digicool.com
Tue, 4 Jan 2000 15:21:23 -0500


Please keep copying the Zope list. I may not always be able to answer,
and others might want to learna bout this or have insights of their own.

> Martijn Pieters wrote:
> > Generally, IE is very precise at interpreting the HTTP 
> standard. It is
> > quite probable that your app has an error somewhere that Netscape
> > glosses over.
>  
> > One way to you could diagnose this, is by using a HTTP tracer like
> > TracePlus32 Web Detective (a demo can be downloaded from
> > http://www.sstinc.com/) which will show you exactly what 
> Netscape and
> > Explorer send over the wire, and what answers Zope gives. 
> This is much
> > easier than using a telnet session and typing in your HTTP requests
> > manually. It should at least show you what faulty requests 
> IE sends, and
> > from there interpret how IE comes to the conclusion it 
> should send those
> > requests.
> 
> Thanks Martijn!
> 
> I didn't think I yet had enough Zope Zen to right something that a
> browser couldn't understand!
> 
> I'll take a look and see what I can find out. Since the code 
> that causes
> the error is very short, I'm going to post it here.
> 
> 
> ==================================8<=====================
> <dtml-var standard_html_header>
> 
> <h1><dtml-var title_or_id></h1>
> <h3>Welcome to the Far West Fibers Scale System</h3>
> 
> <strong>Please select the area you would like to work in...</strong>
> 
> <form action="" method="POST">
> <table border="0">
> <tr>
> <td align="right">
> <input type="submit" name="Tickets/TicketForm:method" value="Scale
> Entry">
> </td><td valign="bottom">
> <a href="Help/HelpforScaleEntry"><h6>Help for Scale Entry</h6></a>
> </td>
> </tr>
> <tr>
> <td align="right">
> <input type="submit" name="Suppliers/SupplierForm:method"
> value="Suppliers">
> </td><td valign="bottom">
> <a href="Help/HelpforSuppliers"><h6>Help for Suppliers</h6></a>
> </td>
> </tr>
> <tr>
> <td align="right">				
> <input type="submit" name="Customers/CustomerForm:method"
> value="Customers">
> </td><td valign="bottom">
> <a href="Help/HelpforCustomers"><h6>Help for Customers</h6></a>
> </td>
> </tr>
> <tr>
> <td align="right">				
> <input type="submit" name="Grades/GradeForm:method" value="Grades">
> </td><td valign="bottom">
> <a href="Help/HelpforGrades"><h6>Help for Grades</h6></a>
> </td>
> </tr>
> <tr>
> <td align="right">
> <input type="submit" name="Categories/CategoryForm:method"
> value="Categories">
> </td><td valign="bottom">
> <a href="Help/HelpforCategories"><h6>Help for Categories</h6></a>
> </td>
> </tr>
> </table>
> </form>
> <dtml-var standard_html_footer>
> ==================================>8=====================
> 
> As I look at this, I think I know what the problem is, and it is a
> subject I have been meaning to ask about but haven't.
> 
> I'd be willing to bet that the problem is caused because the Form's
> method argument is blank. I did this because I use the
> name="form:method" syntax for each of my buttons, and because 
> I saw that
> the URL in the method field was prepended to the URL I was actually
> calling. This seemed to be causing some weird interactions, so I just
> left the method field blank and the weirdness cleared up.
> 
> What are the pros and cons of using the name="form:method" 
> type of call
> versus using a method="form" call and then calling other 
> documents based
> on the values of the various submit buttons?

Hmm...

You use the :method modifier here. I know that a / in the method name is
tolerated, but it has some influence on the setting of the BASE URL.
You'll still need to use a tracer to identify how this goes wrong with
Internet Explorer. It could be that the slash is wrongly escaped, or the
set base is in error. As you have not included the traceback, I cannot
diagnose this properly.

The :method modifier is especially handy in forms whose contents may
have to be sent to different methods of an object. You only have to
specify the objects URL in the action attribute of the form tag, and
give the submit buttons appropriate names, and Zope makes sure that the
contents of that one form will go to the appropriate method.

In your case, it would be better and more readable if you made all the
different buttons into individual form objects, each with their own
action attribute. You are not trying to send the contents of one form to
different Zope object methods depending on what action the user
performed.

You HTML would look something like this:

  <td align="right">
  <form method="POST" action="Tickets/TicketForm"> 
  <input type="submit" value="Scale Entry"></form>
  </td><td valign="bottom">

-- 
Martijn Pieters, Software Engineer 
| Digital Creations http://www.digicool.com 
| Creators of Zope      http://www.zope.org 
| mailto:mj@digicool.com       ICQ: 4532236
| PGP:
http://wwwkeys.nl.pgp.net:11371/pks/lookup?op=get&search=0xA8A32149 
-------------------------------------------