myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Volker Weber (JIRA)" <>
Subject [jira] Commented: (TOBAGO-733) Support for more dynamic layouts by evaluation of the rendered attribute in UICell an UIGridLayout
Date Thu, 01 Jan 2009 19:09:44 GMT


Volker Weber commented on TOBAGO-733:

Hi Michael,

on a quick first look i don't think this is a good idea. 
This could only work if you always add the code to change the span, or the layout tokens,
if a change on rendered is possible.

This will break the current behavior. If i'm correct it would not longer possible to code

  <f:facet name="layout">
    <tc:gridLayout columns="fixed;20px;1*"/>
  <tc:label value="label"/>
  <tc:image value="image/errorMarker.gif" rendered="#{bean.error}"/>
  <tc:in value="#{bean.value}"/>

What did you want to achieve with  this change? Could you give a example where you need this?

> Support for more dynamic layouts by evaluation of the rendered attribute in UICell an
> --------------------------------------------------------------------------------------------------
>                 Key: TOBAGO-733
>                 URL:
>             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,,
>   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.

View raw message