No.
But with further searching, I found:
https://issues.apache.org/struts/browse/WW-2339
Which suggests this is a documented struts bug and is not currently fixed.
As a result, I've changed my setApproved method to the following:
// If no checkboxes are checked, we get Boolean[]{false} instead of
null or an empty int[]
// If some values are selected, we get a String[] of values because
this method takes in Object[] and struts doesn't know what else to do
// If this were set to take in Integer[], we'd get Integers if
values were selected, but an error if none were
// If we have setApproved(Integer[]) and setApproved(Boolean[]) then
an error occurs in all situations
// This is really stupid.
// https://issues.apache.org/struts/browse/WW-2339
public void setApproved(Object[] approved){
if(approved instanceof String[]){
this.approved = new int[approved.length];
for(int i=0; i<approved.length; i++){
int next =
Integer.valueOf(approved[i].toString());
this.approved[i] = next;
}
}
else{
this.approved = new int[]{};
}
}
This is ... ugly. I think I just shouldn't be using checkboxes at all.
Instead I should use select boxes with true and false values -- those work
as expected
-----Original Message-----
From: news [mailto:[EMAIL PROTECTED] On Behalf Of Laurie Harper
Sent: Tuesday, May 20, 2008 1:03 PM
To: [email protected]
Subject: Re: Submitting a form without selecting checkboxes yields 'Input'
result
Michael Gagnon wrote:
> My JSP resembles:
>
>
> ....
> <s:form namespace="/labs" action="ApproveItems" method="post" >
> ....
> <s:iterator value="loggedInUser.approvableBillingItems"
> status="stat" id="next">
> <s:hidden name="itemsPresent" value="%{id}"/>
> ...
> <td><s:checkbox name="approved" fieldValue="%{id}"
> required="false"/></td>
> ...
> </s:iterator>
> ....
> </s:form>
> ....
>
>
>
> My action resembles:
>
> ....
> public class ApproveItemsAction extends ActionSupport {
> private Integer[] approved;
> private Integer[] itemsPresent;
> ...
> public void setApproved(Integer[] approved){ this.approved =
> approved; }
> public void setItemsPresent(Integer[] itemsPresent){
> this.itemsPresent = itemsPresent; }
> }
>
>
>
>
> When some number of checkboxes are selected, then I get an array
containing
> the ID values of the checked objects. This is correct. When NO checkboxes
> are selected, I get:
> No result defined for action bpf.labs.action.ApproveItemsAction and result
> input
>
> Which is not expected. My action never hits the execute method in this
> scenario. It never even hits 'setApproved' (it does if there are values
> checked. It does not if there are none). I expect setApproved be called
with
> an empty array or just null. Either is acceptable -- Null being what I
> expect I'd PROBABLY see and an empty array being what I'd be HAPPY to see.
> Instead this situation just seems to confuse struts and 'input' is
returned
> at what looks like the time the parameter interceptor is probably trying
to
> handle the checkboxes.
>
>
>
> Is there a way to handle this? Having no checkboxes selected needs to be
an
> acceptable form submission state for this action. My itemsPresent array
must
> be null or an empty array.
Forwarding to 'input' usually means a validation error occurred. Do you
have any validation configured for this action?
L.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]