[html-formfu] Losing default value on update

Carl Franks fireartist at gmail.com
Wed Oct 20 21:06:53 GMT 2010

On 15 October 2010 11:23, Charlie Garrison <garrison at zeta.org.au> wrote:
> Good evening,
> Sorry for taking so long to get back to this; had to find time to
> investigate it more.
> On 2/09/10 at 9:50 PM +0100, Carl Franks <fireartist at gmail.com> wrote:
>> On 26 August 2010 18:02, Charlie Garrison <garrison at zeta.org.au> wrote:
>>> I've got a read-only field (from HTML::FormFu::Model::DBIC) which is
>>> losing
>>> the displayed value after form is submitted. I've tried various
>>> combinations
>>> of force_default, retain_default, etc but don't seem to be able to get
>>> the
>>> right configuration.
>> Hi,
>> Sorry, I'm not clear on exactly what behaviour you're seeing, and what
>> you're expecting - can you clarify?
> I'm using a field of type Label to display field/value for current record,
> eg:
>  elements:
>    - type: Label
>      name: username
>      label: User Name
> When the form first loads `$form->model->default_values($user)` the username
> is displayed as expected in the html page. After submitting the form, the
> username is blank in the html page.
>>> All other fields in the form get saved to the db as expected. Am I doing
>>> something wrong in the config or controller action?
>> Are you expecting the read_only field value to be saved to the database?
> No, I'm expecting the form field defined as type Label to retain it's value
> after a form submission.
>> All the read_only option does is cause update/create to not update the
>> column corresponding to that field.
>> In the most basic use, it doesn't need force_default or retain_default
>> to be set - so can you explain what you're wanting that to do?
> Hopefully I've clarified above what I'm wanting. I've figured out why the
> Label field is losing its value. But I'm not sure how to fix it or how I
> should be using FormFu instead.
> The cause of the problem is simple, there is no `username` value being
> submitted with the form since there is no html <input type=hidden> for the
> Label field. The form is populated with submitted data which doesn't contain
> the username, so therefore username appears blank.
> I tried creating a Hidden field type named `username`, but I get the
> following error when submitting the form:
> Can't locate object method "delete_nested_hash_value" via package
> "HTML::FormFu" at /Library/Perl/5.8.8/HTML/FormFu/Element/Label.pm line 77.
> I'm guessing that is due to two elements with the same name.
> It's quite likely I've got the wrong config/setup, but I'm not sure what I
> should be doing. The only solution I've thought of is to set the
> default_value for `username` field regardless of whether the form has been
> submitted. That doesn't seem like the right solution though. Would changing
> the Label element to optionally include a hidden field be a workable
> solution?
> To simplify this issue, is there a 'correct' way to display a
> static/read-only value (eg. Label element) which is retained after
> submitting a form?

Hi Charlie,

It turned out that the "delete_nested_hash_value" error was a bug - it
should actually have been trying to call the method named
However, that still wouldn't have fixed things for you, because the
Label element was deliberately deleting the submitted value, as a
security precaution, because the Label element doesn't want someone
submitting values for what's not really a form field.
So I've now added a check - and if there's another field on the form
with the same name as the Label element, the submitted value won't be
deleted - so it should now work for you using a Hidden field with the
same name as the Label element.
The fix is in svn, and will be included in the next cpan release.


More information about the HTML-FormFu mailing list