For now, a workaround might be to subclass INPUT and replace the xml() 
method (http://code.google.com/p/web2py/source/browse/gluon/html.py#1692) 
so it doesn't check for hideerror and simply displays the widget without 
any error.

Anthony

On Friday, August 24, 2012 3:30:02 PM UTC-4, Jim Karsten wrote:
>
> I created a custom widget including an *INPUT* with a 
> *hideerror=True*parameter. It did not hide error messages.
>
> To simulate:
>
> in model:
> class 
> SimpleWidget(FormWidget):                                                 
>     _class = 
> 'string'                                                           
>                                                                               
>   
>
>     
> @classmethod                                                                
>     def widget(cls, field, value, 
> **attributes):                                
>         default = 
> dict(                                                         
>             _type = 
> 'text',                                                     
>             value = (not value is None and str(value)) or 
> '',                   
>             
> )                                                                   
>         attr = cls._attributes(field, default, 
> **attributes)                    
>                                                                               
>   
>
>         return INPUT(hideerror=True, 
> **attr)                                    
>                                                                               
>   
>
> db.define_table('atable',                                                     
>   
>
>     Field('afield', 
> 'string',                                                   
>         
> widget=SimpleWidget.widget,                                             
>         
> requires=IS_NOT_EMPTY(),                                                
>         
> ),                                                                      
>     
> migrate=True,                                                               
>     
> )                                                                           
>                                                                               
>   
>
> In controller:
>                                                                   
> def 
> test_hideerror():                                                           
>     response.generic_patterns = 
> ['html']                                        
>     form = crud.update(db.atable, 
> request.args(0))                              
>     return dict(form=form)                                               
>
> Submit form with the 'afield' empty and it displays an error.
>
> This patch fixes it but it may change the logic in a way not originally 
> intended. In *gluon/html.py class DIV() def _traverse()*, 
> change:                           
>                                                                               
>   
>
>         
> c['hideerror']=hideerror                                                
>                                                                               
>   
>
> to                                                                          
>
>         if 'hideerror' not in 
> c.attributes:                                     
>             c['hideerror']=hideerror                           
>
> The patch only sets the hideerror attribute if it doesn't already exist. 
> With tet patch, if the widget has *hideerror=True*, if you use *
> form.validate(hideerror=False)*, a field using the widget will still hide 
> the error.
>

-- 



Reply via email to