You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Michael Gagnon <mg...@genome.med.harvard.edu> on 2008/05/20 16:51:28 UTC

Submitting a form without selecting checkboxes yields 'Input' result

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.



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Submitting a form without selecting checkboxes yields 'Input' result

Posted by Michael Gagnon <mg...@genome.med.harvard.edu>.
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:news@ger.gmane.org] On Behalf Of Laurie Harper
Sent: Tuesday, May 20, 2008 1:03 PM
To: user@struts.apache.org
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: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Submitting a form without selecting checkboxes yields 'Input' result

Posted by Laurie Harper <la...@holoweb.net>.
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: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org