Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I bind a checkbox to a boolean in Play! framework

An app I'm working on using the Play! Framework has an object called gift with a boolean property, called Taken. How do I show the state of this value as a checkbox on my view? I've tried :-

<input id="gift_Taken" class="" type="checkbox" name="gift.Taken" value="true"  />
<input type="hidden" name="gift.Taken" value="false" />

based on examples I've seen from the autogenerated CRUD forms, but the checkbox is not checked when the property is True, which is what I'm aiming for.

Anyone know the correct way to achieve this?

like image 579
Rob Cowell Avatar asked Nov 20 '11 21:11

Rob Cowell


2 Answers

The accepted answer is actually not 100% correct as it doesn't handle the "unchecked" case. To handle both cases you need a hidden field:

<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''}  />
<input type="hidden" name="gift.Taken" value="false" />

Note that the placement seems to be important, so the hidden field must be after the checkbox.

Writing a custom template tag for this, makes it easy not to forget the hidden input (put this into views/tags/checkbox.html):

<input id="${_id}" type="checkbox" name="${_name}" value="true" #{if _checked} checked="checked" #{/if}>
<input type="hidden" name="${_name}" value="false">

Then call this template like this:

#{checkbox id:'gift_Taken', name: 'gift.Taken', checked: gift.Taken /}

See also the related discussion on the play framework list: https://groups.google.com/forum/?fromgroups=#!topic/play-framework/HygQuYF3a8E

like image 167
Jan Thomä Avatar answered Sep 28 '22 15:09

Jan Thomä


You just need to set the checked value against the checkbox, if the value is true.

for example (assuming the object sent in from the view is called gift, and the boolean value is called Taken.

<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''}  />
like image 30
Codemwnci Avatar answered Sep 28 '22 17:09

Codemwnci