[ 
https://issues.apache.org/jira/browse/TAP5-1558?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Howard M. Lewis Ship reassigned TAP5-1558:
------------------------------------------

    Assignee:     (was: Howard M. Lewis Ship)

> FormFragment should allow more fine grained control over when to be 
> considered "invisible"
> ------------------------------------------------------------------------------------------
>
>                 Key: TAP5-1558
>                 URL: https://issues.apache.org/jira/browse/TAP5-1558
>             Project: Tapestry 5
>          Issue Type: Improvement
>          Components: tapestry-core
>    Affects Versions: 5.3
>            Reporter: Robert Zeigler
>            Priority: Minor
>
> The 5.2 line of Tapestry introduced the "alwaysSubmit" parameter to form 
> fragment.  This is nice because it allows the fragment to be submitted even 
> if hidden.  However, it doesn't cover all use cases.  Consider a situation 
> like:
> <form>
>    <div id="tab1">...<t:formfragment ...><t:textfield 
> validate="required".../></t:formfragment></div>
>    <div id="tab2">...<t:formfragment ...><t:textfield 
> validate="required".../></t:formfragment></div>
>    <t:submit/>
> </form>
> User reveals tab 1, then reveals the form fragment on tab1 and makes changes. 
> Now user reveals tab2. Note that the fragment on tab1 is still revealed in 
> the context of tab1, but the entire tab1 is hidden.  There is currently no 
> way to make it so that "submit" will submit the information from the 
> formfragment in both tabs and behave correctly in all situations. I will 
> enumerate.  Some definitions for clarity:
> fragmentX is the fragment on tabX. 
> fragmentX visibility refers to the state of the actual fragment, rather than 
> the state of the containing tab.  So if fragment1 is visible, it means it's 
> visible when tab1 is active... and I am considering it visible when tab2 is 
> active, even though the entire tab1 is invisible.
> 1) If "alwaysSubmit" is false and fragment1 is invisible, you will get the 
> correct behavior regardless of tab1/tab2 visibility
> 2) If "alwaysSubmit" is false and fragment1 is visible, you will get the 
> correct behavior iff tab1 is active.  If tab2 is active, fragment1's fields 
> will not be submitted.
> 3) If "alwaysSubmit" is true and fragment1 is invisible, you will get 
> incorrect behavior (well, technically, it's "correct": the information will 
> be submitted, as per alwaysSubmit, but this is a case where you don't 
> actually /want/ the information submitted if the fragment isn't visible)
> 4) If "alwaysSubmit" is true and fragment is visible, you will get correct 
> behavior.
> You can conditionally "alwaysSubmit": alwaysSubmit on the same condition for 
> visibility as the "visible" trigger.  The problem here comes in the following 
> scenario:
> User opens a page with fragment1 initially visible, but no data yet in the 
> required field.  User marks fragment1 as invisible. User submits the form.  
> The submission will fail because "alwaysSubmit" was true at the time the form 
> rendered.
> The culprit behind this is Tapestry's "isDeepVisible" method.  It searches 
> for visibility up to the point where it finds a form element.  But in the 
> case above, the form element contains the tab divs, so the fragment is 
> determined to be invisible and the data not submitted for the inactive tab, 
> even if the user clicked on the trigger to make the fragment visible while 
> the tab was active.
> This is something of an edge case, but I think it can be handled cleanly by 
> introducing a new parameter to formfragment, such as "visiblebound" (but 
> better named!).  The idea is to allow developers to specify an element or 
> selector expression that bounds the search for visibility.  The default would 
> be the containing form element which would preserve the current behavior. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to