From: Ian S. <ia...@et...> - 2002-04-03 22:18:16
|
Thanks Aaron. I'm getting somewhere. Your suggestion works for me on a HTTP GET. To make it work on a POST too I did : class Login(eSitePage, FormServlet): def __init__(self): FormServlet.__init__(self, 'getForm', [formDef]) eSitePage.__init__(self) def writeForm(self): return self.renderableForm().htFormTable(bgcolor="#ddddff") def login(self, fields): self.write("You are logged in!") def getContent(self): x = self.getForm() # #getForm() will return None on a POST so.. # if not x: x = self.writeForm() return x This not responding to a POST is strange. Note that I'm passing 'getForm' to the form servlet so I can do other things in getContent as well as fetch the form (perhaps that is part of my problem?) Thanks for helping me out on this one! - Ian Sparks. |
From: Ian S. <ia...@et...> - 2002-04-04 14:30:34
|
Ian Bicking Wrote : >> Hmm... if the form is submitted successfully, then getForm won't render a form, but will pass control to a method you defined in your formDef. That might be it...? << I don't think so. My formDef is : formDef = FormDefinition('Login', 'writeForm', [Field.TextField('userid', maxLength=40,description='User ID'), Field.PasswordField('password', size=10, maxLength=20), Field.SubmitButton('submit', description='Login', methodToInvoke='login'), ], formValidators=[ValidateForm()]) my (cut down) login method : def login(self, fields): self.write("You are logged in!") when I do a successful login (which passes the validators) I get the form content I expect with "You are logged in" written to the output above it which is what I expect. If the validation *fails* then I don't get *anything* from getForm() in my output (no form at all) unless I do : > def getContent(self): > x = self.getForm() > # > #getForm() will return None on a POST so.. > # > if not x: x = self.writeForm() > return x In which case I get the form in my output along with the standard validation failure messages. Its strange but I do at least have something working now. - Ian Sparks. -----Original Message----- From: Ian Bicking [mailto:ia...@co...] Sent: Wednesday, April 03, 2002 7:55 PM To: Ian Sparks Cc: 'Aaron Held'; Webware-Discuss "(E-mail) Subject: RE: [Webware-discuss] FunFormKit : 2nd Attempt. Hmm... if the form is submitted successfully, then getForm won't render a form, but will pass control to a method you defined in your formDef. That might be it...? On Wed, 2002-04-03 at 16:18, Ian Sparks wrote: > Thanks Aaron. I'm getting somewhere. Your suggestion works for me on a HTTP > GET. To make it work on a POST too I did : > > class Login(eSitePage, FormServlet): > def __init__(self): > FormServlet.__init__(self, 'getForm', [formDef]) > eSitePage.__init__(self) > > def writeForm(self): > return self.renderableForm().htFormTable(bgcolor="#ddddff") > > def login(self, fields): > self.write("You are logged in!") > > def getContent(self): > x = self.getForm() > # > #getForm() will return None on a POST so.. > # > if not x: x = self.writeForm() > return x > > This not responding to a POST is strange. > > Note that I'm passing 'getForm' to the form servlet so I can do other things > in getContent as well as fetch the form (perhaps that is part of my > problem?) > > Thanks for helping me out on this one! > > - Ian Sparks. > > > _______________________________________________ > Webware-discuss mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webware-discuss > |
From: Aaron H. <aa...@me...> - 2002-04-04 20:45:55
|
I think that I am missing the problem. the line FormServlet.__init__(self, 'getForm', [formDef]) should be told what is the content method to override to for that page to be displayed. The idea is if the servlet is called without the parameters (I think it looks for __formname__ or somthing like that) then the method will be overridden with the the FFK method called writeForm. If the form is called w/ parameters and the values pass vaildation then the content method is overridden with the method that you tied to the action in your form def. So in your case you are filling getForm with the contents of the method login. Think of it this way. The content method mentioned in FormSErvlet.__init__ is the content 'block' that you would like FFK to manage. So you should not use getForm unless getForm is the content area in your page that you wish to fill with the form. Can you send me the servlet? Thanks, -Aaron Held ----- Original Message ----- From: "Ian Sparks" <ia...@et...> To: "'Ian Bicking'" <ia...@co...> Cc: "'Aaron Held'" <aa...@me...>; "Webware-Discuss "(E-mail)" <web...@li...> Sent: Thursday, April 04, 2002 9:30 AM Subject: RE: [Webware-discuss] FunFormKit : 2nd Attempt. > Ian Bicking Wrote : > >> > Hmm... if the form is submitted successfully, then getForm won't render > a form, but will pass control to a method you defined in your formDef. > That might be it...? > << > > I don't think so. My formDef is : > > formDef = FormDefinition('Login', 'writeForm', > [Field.TextField('userid', > maxLength=40,description='User ID'), > Field.PasswordField('password', size=10, > maxLength=20), > Field.SubmitButton('submit', description='Login', > methodToInvoke='login'), > ], > formValidators=[ValidateForm()]) > > my (cut down) login method : > > def login(self, fields): > self.write("You are logged in!") > > when I do a successful login (which passes the validators) I get the form > content I expect with "You are logged in" written to the output above it > which is what I expect. > > If the validation *fails* then I don't get *anything* from getForm() in my > output (no form at all) unless I do : > > > def getContent(self): > > x = self.getForm() > > # > > #getForm() will return None on a POST so.. > > # > > if not x: x = self.writeForm() > > return x > > In which case I get the form in my output along with the standard validation > failure messages. > > Its strange but I do at least have something working now. > > - Ian Sparks. > > -----Original Message----- > From: Ian Bicking [mailto:ia...@co...] > Sent: Wednesday, April 03, 2002 7:55 PM > To: Ian Sparks > Cc: 'Aaron Held'; Webware-Discuss "(E-mail) > Subject: RE: [Webware-discuss] FunFormKit : 2nd Attempt. > > > Hmm... if the form is submitted successfully, then getForm won't render > a form, but will pass control to a method you defined in your formDef. > That might be it...? > > On Wed, 2002-04-03 at 16:18, Ian Sparks wrote: > > Thanks Aaron. I'm getting somewhere. Your suggestion works for me on a > HTTP > > GET. To make it work on a POST too I did : > > > > class Login(eSitePage, FormServlet): > > def __init__(self): > > FormServlet.__init__(self, 'getForm', [formDef]) > > eSitePage.__init__(self) > > > > def writeForm(self): > > return self.renderableForm().htFormTable(bgcolor="#ddddff") > > > > def login(self, fields): > > self.write("You are logged in!") > > > > def getContent(self): > > x = self.getForm() > > # > > #getForm() will return None on a POST so.. > > # > > if not x: x = self.writeForm() > > return x > > > > This not responding to a POST is strange. > > > > Note that I'm passing 'getForm' to the form servlet so I can do other > things > > in getContent as well as fetch the form (perhaps that is part of my > > problem?) > > > > Thanks for helping me out on this one! > > > > - Ian Sparks. > > > > > > _______________________________________________ > > Webware-discuss mailing list > > Web...@li... > > https://lists.sourceforge.net/lists/listinfo/webware-discuss > > > > |
From: Ian S. <ia...@et...> - 2002-04-04 22:07:50
|
Here's my example servlet (named Login2). Pretty simple I think but I'm still managing to screw up royally. To demonstrate, load up the servlet, enter something other than "pass" as the password. Be amazed as no form containing the error is then returned. I appreciate the help. - I. from WebKit.Page import Page from Cheetah.Template import Template from eSitePage import eSitePage from FunFormKit.Form import FormServlet, FormDefinition from FunFormKit import Field from FunFormKit.Validator import ValidatorConverter, FormValidator, \ InvalidField from WebUtils.Funcs import htmlEncode class ValidateForm(FormValidator): def validate(self, fieldDict): if fieldDict["password"] != "pass": return {"password": "Incorrect password"} formDef = FormDefinition('Login2', 'writeForm', [Field.TextField('userid', maxLength=40,description='User ID'), Field.PasswordField('password', size=10, maxLength=20), Field.SubmitButton('submit', description='Login', methodToInvoke='login'), ], formValidators=[ValidateForm()]) the_template = "<html><head></head><body>$content</body></html>" class Login2(Page, FormServlet): def __init__(self): FormServlet.__init__(self, 'getForm', [formDef]) Page.__init__(self) #Get template self.template = Template(the_template) def writeHTML(self): self.template.content = self.getContent() self.write(self.template) def writeForm(self): return self.renderableForm().htFormTable(bgcolor="#ddddff") def login(self, fields): self.writeln("You are logged in") def getContent(self): x = self.getForm() # if not x: x = self.writeForm() return x def getForm(self): return self.writeForm() -----Original Message----- From: Aaron Held [mailto:aa...@me...] Sent: Thursday, April 04, 2002 2:54 PM To: Ian Sparks; 'Ian Bicking' Cc: Webware-Discuss "(E-mail) Subject: Re: [Webware-discuss] FunFormKit : 2nd Attempt. I think that I am missing the problem. the line FormServlet.__init__(self, 'getForm', [formDef]) should be told what is the content method to override to for that page to be displayed. The idea is if the servlet is called without the parameters (I think it looks for __formname__ or somthing like that) then the method will be overridden with the the FFK method called writeForm. If the form is called w/ parameters and the values pass vaildation then the content method is overridden with the method that you tied to the action in your form def. So in your case you are filling getForm with the contents of the method login. Think of it this way. The content method mentioned in FormSErvlet.__init__ is the content 'block' that you would like FFK to manage. So you should not use getForm unless getForm is the content area in your page that you wish to fill with the form. Can you send me the servlet? Thanks, -Aaron Held |
From: Ian B. <ia...@co...> - 2002-04-04 00:50:14
|
Hmm... if the form is submitted successfully, then getForm won't render a form, but will pass control to a method you defined in your formDef. That might be it...? On Wed, 2002-04-03 at 16:18, Ian Sparks wrote: > Thanks Aaron. I'm getting somewhere. Your suggestion works for me on a HTTP > GET. To make it work on a POST too I did : > > class Login(eSitePage, FormServlet): > def __init__(self): > FormServlet.__init__(self, 'getForm', [formDef]) > eSitePage.__init__(self) > > def writeForm(self): > return self.renderableForm().htFormTable(bgcolor="#ddddff") > > def login(self, fields): > self.write("You are logged in!") > > def getContent(self): > x = self.getForm() > # > #getForm() will return None on a POST so.. > # > if not x: x = self.writeForm() > return x > > This not responding to a POST is strange. > > Note that I'm passing 'getForm' to the form servlet so I can do other things > in getContent as well as fetch the form (perhaps that is part of my > problem?) > > Thanks for helping me out on this one! > > - Ian Sparks. > > > _______________________________________________ > Webware-discuss mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webware-discuss > |