On 5/6/10 4:15 AM, RogerV wrote:
The documentation says that the checkbox interceptor "Looks for a hidden
identification field that specifies the original value of the checkbox. If
the checkbox isn't submitted, insert it into the parameters as if it was
with the value of 'false'."
So let's think about how that works:
If a form includes <input type="checkbox" name="foo" value="true" />
then the browser either includes foo=true as a parameter or does not.
The checkbox tag also causes the form to include <input type="hidden"
name="__checkbox_foo" value="true" /> . When the interceptor runs, if
it sees a value for __checkbox_foo but none for foo then it knows the
checkbox was not checked and can add as a request parameter the field
foo with the appropriate value for a non-checked checkbox.
Should the interceptor work with<s:checkboxlist> or does it only work with
<s:checkbox>. All I'm getting back from the<s:checkboxlist> is a list of
selected checkboxes, there's no indication of any that are unselected.
When you're including in the form a bunch of checkboxes with the same
name attribute, the browser will submit those that were checked and not
submit anything for those that were not. Since they all get submitted
with the same name, I can think of no simple way for the server to
distinguish between them, or thus detect which checkboxes were not
submitted (which would then enable the interceptor to decide which
hidden fields need to be introduced into the parameter set.
Given the trouble I've been having with the<s:checkboxlist> tag recently I
thought I'd ask before I dive in.
I could be wrong about this -- I've not used the checkboxlist tag
myself, and have not read any documentation before writing this response
-- I'm just providing my gut reaction on how the underlying html form
mechanisms mean the same checkbox solution would not work easily if the
checkbox's name were not unique. Maybe another solution has been
figured out and implemented already. For example, if there were a set
of hidden fields corresponding to the checkboxes, it might be possible
to figure out which of those values were not included in those submitted
by the checkboxes, and set some other request parameters to match (so
you could end up with a list of checked values (setFoo(List<String>))
and a list of unchecked values (setNotFoo(List<String>))). I'd look in
the documentation, the .ftl files implementing the checkboxlist tag to
see if there are any useful hidden fields included in the form, and the
interceptor code to see exactly what it does (especially when multiple
request parameters have the same name).
-Dale
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org