[ 
http://www.stripesframework.org/jira/browse/STS-638?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=11681#action_11681
 ] 

Mike McNally commented on STS-638:
----------------------------------

> Well, one simple approach would be to introduce a "@DontWorryAboutMe" 
> annotation

I see now that that would be somewhat more complicated than it seems at first 
blush. An annotation on the bean would work but that'd be a little coarse.


> DefaultActionBeanPropertyBinder incorrectly binds "null" to missing fields 
> sometimes
> ------------------------------------------------------------------------------------
>
>                 Key: STS-638
>                 URL: http://www.stripesframework.org/jira/browse/STS-638
>             Project: Stripes
>          Issue Type: Bug
>          Components: ActionBean Dispatching
>    Affects Versions: Release 1.5
>         Environment: All
>            Reporter: Mike McNally
>
> The DefaultActionBeanPropertyBinder, in concert with the "form" tag, sports a 
> feature designed to handle the problematic behavior of HTTP "checkbox" and 
> (though I understand this one a little less) "select" elements. The form tag 
> dumps out a hidden field with a value that comprises a list of the form 
> parameters coded on the page. That list is used by the property binder code 
> to detect that form field values coded into the actual form are missing from 
> the HTTP request parameter map. When that happens, the property binder binds 
> a null value into the action bean properties corresponding to each missing 
> parameter.
> This behavior is probably useful sometimes, but the code that performs the 
> binding does not do it carefully, and can in some cases incorrectly overwrite 
> an already-bound non-null property value. Specifically, consider the case 
> where an action bean has a bean-valued property called "thing", and the form 
> contains three fields: "thing", "thing.x", and "thing.y".  The "thing" field 
> is a stripes:select tag whose options are name-id pairs of existing instances 
> of the "thing" bean type. The "thing.x" and "thing.y" field are (say) simple 
> stripes:text tags representing string properties of the "thing" bean type.
> Consider that the form may be intended to allow a user to select either an 
> existing "thing" from the select tag, or to create a new thing with 
> properties "x" and "y". To achieve that, the form will also have a pair of 
> radio buttons set either to "new" - to allow "x" and "y" properties to be 
> typed in for a new "thing" - or to "known", which enables the stripes:select 
> element and disables "thing.x" and "thing.y".  Thus, upon form submission, 
> the HTTP request will contain either "thing.x" and "thing.y", OR it will 
> contain only an id value for "thing", because client-side code will be 
> careful to disable the form elements according to the radio button settings.
> In the former case - the case where the form submits a "thing.x" and a 
> "thing.y" - what happens on the server is that the property binder will 
> instantiate a "thing" for the action bean, and then set the values of 
> "thing.x" and "thing.y" according to the HTTP parameters. It will then check 
> the hidden "field manifest" form field and notice that "thing" is missing.  
> It will therefore re-set the action bean "thing" property to null, thus 
> overwriting the work already done.
> In the latter case - the case where the form submits a "thing" id value from 
> the select tag and no values from "thing.x" and "thing.y" - the opposite, but 
> equally bad, error will be carried out by the property binder. The action 
> bean will be given the instantiated instance of "thing" based on the 
> passed-in id value from the HTTP request. Then the code will notice that 
> "thing.x" and "thing.y" are missing from the parameter map, so it will bind a 
> "null" over the properties in the instantiated "thing" instance.
> I'm not sure how this should be fixed. There's no good workaround in the 
> action bean, and I can't figure out a good workaround on the page. For now 
> I'm going to create my own property binder class that just doesn't do that 
> missing field check at all.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://www.stripesframework.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to