Having just spent half the afternoon trying to get a page with a checkbox to work correctly with Struts I stumbled across the following. I knew that an unchecked value was never returned in the form and, as we are using Struts DynaActionForms, was starting to think about over-riding the Form when I came across a solution that is so simple it's embarrassing.
The solution is to add a hidden field immediately after the checkbox field i.e.
<html:checkbox property="currentLocation" value="true"/>When the form is submitted if the checkbox is selected the hidden field is ignored, but if the checkbox is empty it isn't in the form so the hidden field is used.
<html:hidden property="currentLocation" value="false"/>
Works a treat.