[ 
https://issues.apache.org/jira/browse/TOBAGO-733?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12660312#action_12660312
 ] 

Michael Bauer commented on TOBAGO-733:
--------------------------------------

Hi Volker,

thanks again!

Of course I am not planning to only put one component into a cell - that would 
be redundant, just like you said. I just wanted to keep the example simple, 
since it already shows my point. 

In the real application there are other more complex faces snippets that will 
be included - using tiles2 - to fill the cells. The actual page layout should 
look sth. like this:

*****************************************
* MenuBar                                                *
*****************************************
* Logo * Header                                     *
*            *                                                   *
*****************************************
* Menu * Content                                    *
*            *                                                   *
*            *                                                   *
*****************************************
* Footer                                                    *
*****************************************

The header, menu, content and footer parts each have their own jsp and are 
included using tiles2. My goal is to make the layout somewhat dynamic to show 
the menu only if the application was accessed standalone. However, included in 
a portal, the menu and the header-row should not be rendered.

My first approach to this was - as mentioned - to use UICells for the layout. 
When testing this layout, I came across the different behavior of the grid 
layout for single/multi rows. Maybe using UICells is the wrong approach here, 
but I was simply wondering if the grid layout behavior is as it should be.

Would it be a viable option to add an attribute to the UIGridLayout tag to 
determine if a multi row grid should fill empty (not rendered) slots or not? 
The default would still be as it is now, but if the attribute would be set to 
true, the evaluation could be performed as listed above (point 1 - 4). That way 
both use cases would become possible and the user can decide which behavior 
fits his needs.

> Support for more dynamic layouts by evaluation of the rendered attribute in 
> UICell an UIGridLayout
> --------------------------------------------------------------------------------------------------
>
>                 Key: TOBAGO-733
>                 URL: https://issues.apache.org/jira/browse/TOBAGO-733
>             Project: MyFaces Tobago
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 1.0.20, 1.0.21, 1.1.0
>         Environment: Windows XP Professional
> Apache Tomcat 6.0.18
> Java6 Update 10
> MyFaces 1.2.5
> Tomahawk 12-1.1.8
> Tobago 1.0.20
>            Reporter: Michael Bauer
>            Priority: Minor
>         Attachments: tobago-core-1.0.20.jar, UICell.java, UIGridLayout.java
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> Some child components of the grid layout might change their rendered state 
> during user interaction, for example if the user decides to not display a 
> menu component or an information box etc. In that case the layout should 
> dynamically devide the given space using appropriate row-/colspans. To 
> achieve this, two changes would be necessary:
> 1. Using UICell in a grid layout with dynamic spans:
> Let a managed bean support the dynamic layout by calculating the actual cell 
> spans. Add value bindings to UICell's spanX- and spanY-attributes like this 
> for example:
>   public Integer getSpanX() {
>         ValueBinding spanBinding = getValueBinding( ATTR_SPAN_X );
>         if(spanBinding != null)
>         {
>                 Object obj = spanBinding.getValue( getFacesContext() );
>             if(obj != null && obj instanceof Integer)
>             {
>                 Integer integer = (Integer) obj;
>                 return integer;
>             }
>         }
>         return spanX;
>   }
> 2. Calculating layout in UIGridLayout depending on the rendered state of the 
> child components (UICells in this case)
> If the child would be a cell and the cell would have a (changing!) value 
> binding for the rendered attribute, the cell and it's contents would not be 
> rendered - which is OK; However, the place taken by the not rendered cell 
> will not be filled by the other components, hence leaving an empty space in 
> the layout...
> Checking if a child is rendered before evaluating the grid layout fixes this.
> The necessary changes would have to be made in method "private List<Row> 
> createRows() {" for example like this:
>         boolean childRendered = component.isRendered();
>         if(childRendered)
>         {
>               rows.get(r).addControl(component, spanX);
>               rows.get(r).fill(c + 1, c + spanX, component.isRendered());
>         }
> With that, a child component with the attribute rendered set to false will be 
> ignored in the layout.
> The second change would need for a dynamic span-evaluation of the other 
> components in the same row as suggested in the first change.
> Regards,
> Michael

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to